1.设计思想
①存ID到一个数组
②当某水王出现次数0次时:如果新出现的和别的水王ID相同,别的水王出现次数+1;如果不是,那么它是新水王,记录并给它自己次数+1
③如果出现与某水王相同ID,某水王ID出现次数+1;如果出现全新ID,全部水王ID出现次数-1
2.代码实现
//2016-5-26 李娜 //寻找三个发帖数量超过了1/4的“水王” #include <iostream> #include <fstream> #include <String> #define N 50 using namespace std; int main() { int j;//循环用数 int i=0;//有i个ID string id;//当前读取ID string a[N]={};//存ID ifstream infile("e:\sw.txt"); if (!infile) { cout<<"文件打开出错!"<<endl; } while (getline(infile,id))//读取每行的ID { a[i]=id; i++; } ///////////////////////////////////////////// ///////以上:将文件内容给a[i]/////////////////////// ///////以下:算水王///////////////////////////////// //////////////////////////////////////////// int s[]={0,0,0};//分别给三个水王计数用 string sw[]={"","",""};//存水王ID for(j=0;j<i;j++) { if (s[0]==0)//水王1出现0次 { if (a[j]==sw[1])//如果又出现是第2个水王 { s[1]++;//水王2出现次数+1 } else if (a[j]==sw[2])//如果又出现是第3个水王 { s[2]++;//水王3出现次数+1 } else//这是新水王 { sw[0]=a[j];//记录新水王 s[0]++;//出现+1 } } else if (s[1]==0)//水王2出现0次,以下代码同上含义 { if (a[j]==sw[0]) { s[0]++; } else if (a[j]==sw[2]) { s[2]++; } else { sw[1]=a[j]; s[1]++; } } else if (s[2]==0)//水王3出现0次,以下代码同上含义 { if (a[j]==sw[0]) { s[0]++; } else if (a[j]==sw[1]) { s[1]++; } else { sw[2]=a[j]; s[2]++; } } else//水王都有存数据了,有可能出现重复的数据,也有可能是新数据;所以重复了就次数+1,新的就次数都-1 { if (sw[0]==a[i]) { s[0]++; } else if (sw[1]==a[i]) { s[1]++; } else if (sw[2]==a[i]) { s[2]++; } else s[0]--,s[1]--,s[2]--; } } for (int k=0;k<3;k++) { cout<<sw[k]<<endl; } }
3.测试截图
4.个人总结
本来是用数组,一组一组比,但是出现两个结果:
一是全变成最后一个ID
二是全一样的ID
我发现那样会覆盖,所以不能那样比