zoukankan      html  css  js  c++  java
  • 找水王

    一、题目

      三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他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中对应的),不太会删数(有错),另外,还是好好想想快速算法。

  • 相关阅读:
    spring 实现测试解耦
    Java 反射实例 (二)
    Java 反射实例
    Thread.join()
    缓存输入/输出流
    文件的拷贝
    将键盘输入的数据保存到文件中:OutputStream
    InputStream中read方法各个参数的意义
    OutputStream
    InputStream中的主要的子类
  • 原文地址:https://www.cnblogs.com/justmaomao/p/5508821.html
Copyright © 2011-2022 走看看