找“水王”
一、题目要求
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。
二、设计思想
水王发表的帖子超过半数,也就是说,如果将一篇帖子与水王的帖子抵消,这样一篇一篇进行,水王的帖子最终一定会剩下。我们假设第一篇帖子是水王的,设置一个参数统计与这篇帖子相同的帖子的个数,然后查找下一篇,如果是水王的,相同数加一,如果不是水王的就减一。当相同书减到小于0的时候,就把当前的这篇帖子重新作为水王的帖子。依次循环直到检查完所有的帖子。
三、代码
#include<iostream> using namespace std; void main() { int a[1000], n, same=0, id; cout << "请输入论坛所有ID的个数"; cin >> n; cout << "请输入所有的ID序列"; for (int i = 0; i<n; i++) { cin >> a[i]; } id = a[0]; for (int i = 0; i<n - 1; i++) { if (id == a[i + 1]) { same += 1; } else { same -= 1; } if(same == -1) { i += 1; same = 0; id = a[i + 1]; } } cout << "水王的ID是:" << id << endl; }
四、截图
五、总结
一开始得知题目时我非常奇怪,觉的看不懂老师的题目,但是后来经过了思考与同学的提醒,我理清了思路。在得到一道题的要求时,我们不一定会立马就懂得如何去做,主要还是要去思考,思考一个思路再写代码要比直接写更节省时间。