题目要求:
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖 数目超过了帖子数目的一半。
如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
想法:
我们在这张ID列表中要注意到水王的ID是出现了帖子数目的一半这也就成为了题目的突破口,就如同参加选举投票时,你可以选三个人,而且参加选举的也仅是这三个人,如果你每个人都投了一票,这就意味着你放弃了选择;同理水王拥有最高的“票数”,当他减去别人的“票数”时,他依旧为正数,那他就获胜了。
源代码:
#include<iostream.h> int find(int *ID, int N) { int nTimes = 0; int i; int people; for (i = 0; i < N; i++) { if (nTimes == 0) { people = ID[i]; nTimes++; } else { if (people == ID[i]) nTimes++; else nTimes--; } } return people; } void main() { int a[15]={5,6,8,2,4,9,7,5,7,6,5,2,5,1,5}; int record=find(a,15); cout<<"水王ID"<<" "<<record<<endl; }
结果截图: