找水王(二)

题目要求:大水王消失,出现三个小水王,所发帖数超过所有帖数的四分之一

设计思路:这次的算法沿用上一次,只是水王个数增加,继续使用同加异减的方法,只不过增加选择分支语句,精髓还是一样的。

代码:

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{   
	char iD[20][20];//每行读入的字符
	string ID[20];//字符串ID
	int a=0;  
   ifstream out("ID.txt"); 
   if(!out)
   {
	   cerr<<"文件打开错误"<<endl;
       return 1;
   }
   cout<<"ID表:"<<endl;
   while(!out.eof())
   {
	  out>>iD[a];
	  ID[a]=iD[a];//将字符数组转换为字符串
	  cout<<ID[a]<<endl;//输出ID表
	  a++;	 
   }
   string king[3];//水王
   int  count[3]={0,0,0};//计数
   for(int i=0;i<20;i++)
  {
	     if(count[0]==0)//计数为零,将当前ID设为水王
        {
             count[0]=1;
             king[0]=ID[i];
        }
        else if(count[1]==0)//计数为零,将当前ID设为水王
        {
             count[1]=1;
             king[1]=ID[i];
        }
        else if(count[2]==0)//计数为零,将当前ID设为水王
        {
             count[2]=1;
             king[2]=ID[i];
        }
	    else if(king[0]==ID[i])//若当前ID和水王是同一人,则改水王的计数加一
        {
             count[0]++;
        }
        else if(king[1]==ID[i])//若当前ID和水王是同一人,则改水王的计数加一
        {
            count[1]++;
        }
        else if(king[2]==ID[i])//若当前ID和水王是同一人,则改水王的计数加一
        {
             count[2]++;
        }
        else//若当前ID不属于水王,则水王ID均减一
        {
             count[0]--;
             count[1]--;
             count[2]--;
         }
   
   }
   cout<<"水王为:"<<king[0]<<"  "<<king[1]<<"  "<<king[2]<<endl;
   out.close();
   return 0;
}

  

运行结果:

经验总结:

做程序要学会举一反三,很多东西都是大同小异,当老师说了这个题目,我很快就想到应该是一样的,也许是一种惯性,一个使顺了就不愿意换,不过这样很简单。所以呢就是大道至简,越简单越快捷。

posted @ 2016-05-27 16:45  我心悦你  阅读(185)  评论(0编辑  收藏  举报