找水王问题续

一、题目

三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他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的比较消去方法,即如何实现计数。通过同学讨论和参考核心代码实现。同时这次仍是对优化算法的训练,这些优化训练拓展了我们的思路。

原文地址:https://www.cnblogs.com/dr73/p/4468944.html