找水王

题目:
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
思路:
根据题目可以得到如下信息:
1.水王会回复每个ID的发的帖子
2.水王发帖数超过了论坛帖子数目的一半
根据这两点,我认为可以通过查找每个ID的回帖ID号,找到水王(因为水王会回复其他ID发的每个帖子,所以通过查询各个ID的回帖ID,则查询多少个ID,必有多少个重复的ID,即水王),但这种方法查询较为繁琐。
通过别人的讲解,得到另一种思路:
消消乐游戏的原理
定义初始化变量n和m,用m来表示ID,每当m与当前ID不相同时,n就减1;反之就加1;当n小于0时更新m为当前ID。
代码如下:
 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 #define N 5
 5 
 6 void main()
 7 {
 8     int n = 0;
 9     string a[N], m;
10     cout << "输入ID:" ;
11     for (int i = 0; i < N; i++)
12     {
13         cin >> a[i];
14     }
15 
16     m = a[0];
17 
18     for (int i = 0; i < N; i++)
19     {
20         if (m == a[i])
21         {
22             n += 1;
23         }
24         else
25             n -= 1;
26         if (n < 0)
27         {
28             m = a[i];
29         }
30     }
31     cout << "水王是:" << m << endl;
32 }

总结:一个好的思路是实现代码最重要的基石,不能局限于一种方法,多想,多问。只有集思广益才能锻炼大脑。

原文地址:https://www.cnblogs.com/SanShaoS/p/4515836.html