找水王(二)
题目要求:大水王消失,出现三个小水王,所发帖数超过所有帖数的四分之一
设计思路:这次的算法沿用上一次,只是水王个数增加,继续使用同加异减的方法,只不过增加选择分支语句,精髓还是一样的。
代码:
#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; }
运行结果:
经验总结:
做程序要学会举一反三,很多东西都是大同小异,当老师说了这个题目,我很快就想到应该是一样的,也许是一种惯性,一个使顺了就不愿意换,不过这样很简单。所以呢就是大道至简,越简单越快捷。