题目:三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
思路:根据上课的时候同学提供的思路,这个问题可以简化为若干个数字里找出重复最多的一个数字,首先设立一个计数的参数j1,从第一个id开始,如果有两个连续的不同就跳过,同时j1减1,两个连续的id相同j1加1,并把连续的id值赋值给i1
总结:主要是同学的思路打开了我的思维,把问题简化,找出重复次数最多的那个数字也就是水王,同时也告诉我学会集思广益,自己的想法总归是有局限性的
#include <iostream> using namespace std; int findwater(int m[20],int n){ int i1=0,j1=0; //设立两个参数,i1记录水王id,j1计数, int i; for(i = 0;i < n;i++){ if(i1 == 0 || j1 == 0){ //若i1为0或者j1为0,为i1(重新)赋值m[i],同时j1加一 i1 = m[i]; j1++; } else if(i1 == m[i]) //若两个id值连续,j1加一 j1++; else j1--; } return i1; } int main(){ int id[20] ,num; int i; cout<<"请输入发帖数:"<<endl; cin>>num; cout<<"请输入发帖id:"<<endl; for(i = 0;i < num;i++) cin>>id[i]; cout<<"水王id为: "<<findwater(id , num)<<endl; system("pause"); }