一、题目
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
二、设计思想
延续上一篇找发帖数超过一半的ID的思想,将不同的消去。这次是将三个ID放入一个数组,与其他ID比较,不同则消去,最后剩下的就是最多的三个ID。设置数组k计数来实现消去。
三、代码
1 #include <iostream.h> 2 3 int main() 4 { 5 int n[20]={1,2,8,9,7,1,1,6,1,2,2,9,11,15,2,1,2,1,9,9}; 6 int tienum=20; 7 int i,j; 8 int shui[3]={0,0,0},k[3]={0,0,0}; 9 10 for(i=1;i<tienum;i++) 11 { 12 13 if (shui[0]==n[i]) 14 k[0]++; 15 else if (shui[1]==n[i]) 16 k[1]++; 17 else if (shui[2]==n[i]) 18 k[2]++; 19 else if (k[0]==0) 20 { 21 shui[0]=n[i]; 22 k[0]++; 23 } 24 else if (k[1]==0) 25 { 26 shui[1]=n[i]; 27 k[1]++; 28 } 29 else if (k[2]==0) 30 { 31 shui[2]=n[i]; 32 k[2]++; 33 } 34 else 35 { 36 k[0]--; 37 k[1]--; 38 k[2]--; 39 } 40 } 41 cout<<"水王ID是:"<<shui[0]<<"和"<<shui[1]<<"和"<<shui[2]<<endl; 42 return 0; 43 }
四、实验结果截图
五、总结
这是上一次题目的扩展,关键的消除思想已经有了,这次主要是解决三个ID的比较消去方法,即如何实现计数。通过同学讨论和参考核心代码实现。同时这次仍是对优化算法的训练,这些优化训练拓展了我们的思路。