一、题目
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
二、设计思想
这次寻找的ID有三个,所以我们用三个标记来计数,当三个标记有空位时,ID直接放入,并开始计数,如果没有空位,比较新的ID和三个标记ID,如果与其中某一个相同,那个标记就计数增加,如果没有,那么所有的标记都减少。
三、源代码
// #include <stdafx.h> #include <iostream.h> int main(int argc, char* argv[]) { int n[16]={2,9,7,2,2,3,3,2,4,3,5,5,3,5,3,2}; int tienum; int i,j; int shui[3]={0,0,0},k[3]={0,0,0}; tienum=16; /* cout<<"请输入帖子总数:"; cin>>tienum; cout<<endl; for(i=0;i<tienum;i++) { cout<<"请输入第"<<i+1<<"个帖子的ID:"; cin>>a[i]; }*/ for(i=1;i<tienum;i++) { if (shui[0]==n[i]) k[0]++; else if (shui[1]==n[i]) k[1]++; else if (shui[2]==n[i]) k[2]++; else if (k[0]==0) { shui[0]=n[i]; k[0]++; } else if (k[1]==0) { shui[1]=n[i]; k[1]++; } else if (k[2]==0) { shui[2]=n[i]; k[2]++; } else { k[0]--; k[1]--; k[2]--; } } cout<<"水王ID是:"<<shui[0]<<"和"<<shui[1]<<"和"<<shui[2]<<endl; return 0; }
四、截图
五、总结
方法都一样,只不过量增加了,多思考一点就能进步一点