UNIN队设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。

如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

思路:最初任务直接记录每个ID的发帖量。但是这么简单老师也就不用提问了。后来又考虑如果一个人帖子过半的话,随机取100次ID,100次中取到次数最频繁的就是水王,这个方法我个人觉得非常好,当然他是有错误可能的,并且可以通过概率论相关知识计算。最后经老师点拨,这道曾经的面试题终于得出答案。通过“删帖”的方式,水王发帖数目超过了帖子数目的一半,我们从列表头开始匹配,每匹配到一个不一样的就把俩帖子都删了,遇到一样的就删一个留一个。那么一定可以得到海王

c语言代码如下

 

#include<iostream>

#include<string>

#define N 10    

 

using namespace std;

int main()

{

    string king;

    //定义列表

    string IdList[N]={"2","3","1","3","1","1","7","1","2","3"}

 

    int i=0;

    int num=1;

    king=IdList[0];

    for(i=1;i<N;i++)    {

        //如果当前idking id不同

        if(IdList[i]!=king)

        {

            //num-1

            num=num-1;

            //num0,将下一个id 设为 king,并直接跳过下一次循环,并将 num设为1

            //num不为0king 不变

            if(num==0)

            {

                king=IdList[i+1];

                i=i+1;

                num=1;

            }

        }

        //idking id相同,num+1

        else

        {

            king=IdList[i];

            num=num+1;

        }

    }

    cout<<"要找的水王的 id :"<<king<<endl;

    return 0;

}