找水王

一、题目

  三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
  如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

二、设计思想

  (注:自己想的未体现快速遍历!!!因此,我还是进行了搜了看了别人的思想,自我实现代码)

  ( 百度的时候参考的思路的代码:http://www.nowamagic.net/librarys/veda/detail/2377)

  (此处暂只有自己的慢速代码,快速的仍有错误,还在修改中)

  不考虑时间复杂度的思路:

    整体思路:

      首先遍历所有的发帖人ID,删除重复ID,并统计重复出现的次数,次数加一大于帖子总数的1/2,即输出结果。

    具体思路:

      将一串ID(帖子对应的,即发帖人的ID)放入一个数组中。

      从ID数组第一个开始遍历,后一个与前面的都不相同,则保留;

      若相同,则数组前移,并在另一个计数数组中进行重复次数记录。

      最后在计数数组中寻找最大的值即可,并找到对应的ID数组中的对应的ID。   

三、代码实现

//找水王2016.5.20
//20143066毛雯雯
#include<iostream>
using namespace std;
void main()
{
    int id_array[12]={3,1,2,3,4,3,3,5,3,6,3,3};   //ID数组,仅用12,做一个例子,主要验证思路的正确
    int i,j;            //循环变量
    int count_array[12]={0,0,0,0,0,0,0,0,0,0,0,0};//计数数组

    cout<<"帖子ID为:"<<endl;
    for(i=0;i<12;i++)
    {
        cout << id_array[i] << " ";
    }
    cout<<endl;
    cout<<endl;
    for(i=0;i<12;i++)
    {
        for(j=1;j<12;j++)
        {
            if(id_array[i]==id_array[j])
            {
                count_array[i]++;
            }
        }
    }
    cout<<"水王ID为:"<<endl;

    for(i=0;i<12;i++)
    {    

        if(count_array[i]>6)
        {
            cout << id_array[i] << " ";
        }
    }
    

}

四、实现截图

 

五、个人总结

数组的初始化要注意(数字还是ASCII中对应的),不太会删数(有错),另外,还是好好想想快速算法。

原文地址:https://www.cnblogs.com/justmaomao/p/5508821.html