题目:
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他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 }
总结:一个好的思路是实现代码最重要的基石,不能局限于一种方法,多想,多问。只有集思广益才能锻炼大脑。