寻找水王

问题:

三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
解题思路:
最简单的思路是:我们通过遍历寻找每个id出现的次数,然后比较哪个id出现的次数最多,哪个就是水王。但是这样做比较麻烦,运行速度也比较慢。所以,运用一种比较简单的方法,我们知道水王的帖子数超过半数,所以我们可以用相连的两个id进行比较,如果不同则删除这两个id,剩下的最后一个id就是超过半数的那个id
 1 #include<iostream>
 2 using namespace std;
 3 #define N 100
 4 int main()
 5 {
 6     int ID[N];//发帖者ID
 7     int i,a,count=0;//计数变量,帖子的数量,设置水王出现次数初始化
 8     int water_king;
 9     cout << "输入帖子的数量:" << endl;
10     cin >> a;
11     if (a <= 0)
12     {
13         cout << "输入的帖子数量不正确,请重新输入:" << endl;
14         cin >> a;
15         while (a < 0)
16         {
17             cout << "输入的帖子数量不正确,请重新输入:" << endl;
18             cin >> a;
19         }
20     }
21     cout << "输入发帖者id号:" << endl;
22     for (i = 0; i<a; i++)
23     {
24         cin >> ID[i];
25     }
26     //寻找水王ID过程
27     for (i = 0; i<a; i++)//遍历a次
28     {
29         if (count == 0)    //初始时,把数组第一个元素赋给ShuiWang,如果count为0,代表前i-1个中元素两两消完,重新赋值
30         {
31             water_king = ID[i];
32             count = 1;
33         }
34         else
35         {
36             if (water_king == ID[i])//相同则计数加1,不同则减一
37             {
38                 count++;
39             }
40             else
41                 count--;
42         }
43     }
44     cout << "水王的id是:" << water_king << endl;
45     return 0;
46  }

测试结果:

 
posted @ 2016-05-20 16:40  apan008  阅读(145)  评论(0编辑  收藏  举报