• 课堂作业之找小水王


    一、题目

    三人行设计了一个灌水论坛。随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?

    二、设计思路

    上一次是找出一个水军,这个水军发帖数超过了总帖数一半,这一次是找三个水军,这三个水军每一个人的帖子数都超过了总帖数的1/4,我们只需要在上一次的基础上进行改进就可以了,上一次是挨着消去两个,这次挨着消去四个,剩下最后的三个就是水军。

    三、源代码

    #include<iostream.h>
    #include<assert.h>
    
    int * search(int *userId,int n)
    {
        int curId[3] = {0};           //当前保存的三个不同ID
        int curNum[3] = {0};          //当前三个不同ID各自的数目
    
        for(int i = 0;i < n;i++)
        {
            if(curNum[0] == 0&&userId[i] != curId[1]&&userId[i] != curId[2])
            //用户ID在当前ID中不存在相同ID且userID[0]的当前数量为0
            {
                curNum[0] = 1;
                curId[0] = userId[i];
            }
            else if(curNum[1] == 0&&userId[i] != curId[0]&&userId[i] != curId[2])
            {
                curNum[1] = 1;
                curId[1] = userId[i];
            }
            else if(curNum[2] == 0&&userId[i] != curId[0]&&userId[i] != curId[1])
            {
                curNum[2] = 1;
                curId[2] = userId[i];
            }
            else if(userId[i] == curId[0])
            //用户ID和当前ID相同则当前ID数+1
            {
                curNum[0]++;
            }
            else if(userId[i] == curId[1])
            {
                curNum[1]++;
            }
            else if(userId[i] == curId[2])
            {
                curNum[2]++;
            }
            else if(userId[i]!=curId[0]&&userId[i]!=curId[1]&&userId[i]!=curId[2])
            //四种ID一起抵消
            {
                curNum[0]--;
                curNum[1]--;
                curNum[2]--;
            }
        }
    
        return curId;//返回当前剩余的三个ID即为三个水王
    }
    
    void main()
    {
        int n;
        int *userId;
        int curId[3] = {0};
        int curNum[3] = {0};
        int i;
    
        cout<<"输入总帖子数:";
        cin>>n;
        assert(n > 0);
        userId=new int[n];
        
        cout<<"输入每一条帖子的id(空格隔开):"<<endl;
        for(i = 0;i < n;i++)
        {
            cin>>userId[i];
        }
        
        cout<<"三个水王ID是
    ";
        for(i = 0;i < 3;i++)          //输出三个水王ID
        {        
            cout<<*search(userId,n) + i<<"	";
        }
    }
    

      

      四、运行结果

    五、心得体会

    这道题目和上次作业有一定的练联系,在上一次的基础上进行了扩展,那么大致的方法还会和上一次大致相同,我们只要在上一次的基础上进行改进就好了。

  • 相关阅读:
    JS加密对应的c#解码
    Content-Type: application/www-form-urlencoded
    使用abcpdf分页设置的问题
    Windows10远程报错:由于CredSSP加密Oracle修正
    ueditorUE 去掉本地保存成功的提示框!
    js进制转换
    缓存穿透 缓存雪崩 缓存击穿
    DTcms 模版用vs2015或2017 打开编辑时候 粘贴出问题 代码被调整
    通俗简述 依赖倒置•控制反转•依赖注入•面向接口编程 的思想
    tcp/ip
  • 原文地址:https://www.cnblogs.com/GloryYT/p/5541083.html
Copyright © 2020-2023  润新知