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

    一、题目

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

    目超过了帖子数目的一半。 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?但是随着论坛的发展,管理员

    发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速的找到他们吗?

    二.算法思想:

       因为三个“小水王”发帖数是大于总帖数的1/4,所以到最后总会有使得记录次数的值>0。

       用含三个元素的water_ID[3]分别记录找到的小水王ID值,用含三个元素的数组count[3]作为计数器。

       每次选取一个ID与water_ID比较,若有相同则计数器加一,若与三个water_ID都不相同,则三个计数器均减1。

       若count减至为0,则这个ID出现的次数不符合要求,重新给该water_ID赋值。

    三、代码

    #include<iostream>
    #define N 10000
    using namespace std;
    
    void water_max(int ID[],int num)    //寻找该帖子列表中三个“小水王”的ID值即water_ID[0]、water_ID[1]、water_ID[2],即出现次数大于帖子数1/4的ID值
    {
        int count[3]={0,0,0};    //用于寻找三个小水王的计数
        int water_ID[3]={0,0,0};    //将小水王的ID值water_ID[]先初始化为0
        for(int i=0;i<num;i++)    //寻找小水王    
        {
            if(count[0]==0&&water_ID[1]!=ID[i]&&water_ID[2]!=ID[i])    //当count[0]的值为0,ID[i]不等于其他两个water_ID时赋给water_ID[0],count[0]的值加一
            {
                water_ID[0]=ID[i];
                count[0]++;
            }
            else if(count[1]==0&&water_ID[0]!=ID[i]&&water_ID[2]!=ID[i])    //当count[1]的值为0,ID[i]不等于其他两个water_ID时赋给water_ID[1],count[1]的值加一
            {
                water_ID[1]=ID[i];
                count[1]++;
            }
            else if(count[2]==0&&water_ID[0]!=ID[i]&&water_ID[1]!=ID[i])    //当count[2]的值为0,ID[i]不等于其他两个water_ID时赋给water_ID[2],count[2]的值加一
            {
                water_ID[2]=ID[i];
                count[2]++;
            }
            else if(water_ID[0]==ID[i])    //当count[0]不等于0,ID[i]的值等于water_ID[0],count[0]加一
            {
                count[0]++;
            }
            else if(water_ID[1]==ID[i])    //当count[0]不等于0,ID[i]的值等于water_ID[1],count[1]加一
            {
                count[1]++;
            }
            else if(water_ID[2]==ID[i])    //当count[0]不等于0,ID[i]的值等于water_ID[2],count[2]加一
            {
                count[2]++;
            }
            else if(water_ID[0]!=ID[i]&&water_ID[1]!=ID[i]&&water_ID[2]!=ID[i])    //当ID[i]的值不等于任一water_ID[],三个计数器count均减一
            {
                count[0]--;
                count[1]--;
                count[2]--;
            }
        }
        cout<<"该论坛中小水王的ID为:"<<water_ID[0]<<" "<<water_ID[1]<<" "<<water_ID[2]<<endl;
    }
    
    int main()
    {
        int num;
        int ID[N];
    
        cout<<"请输入帖子总数:"<<endl;
        cin>>num;
    
        cout<<"请依次输入帖子列表中作者ID:"<<endl;
        for(int i=0;i<num;i++)
        {
            cin>>ID[i];
        }
    
        water_max(ID,num);    //主函数中调用water_max寻找并输出三个小水王的ID值
    
        return 0;
    }

    四、运行结果截图

  • 相关阅读:
    Django rest framework集成微博第三方登录
    Python web项目Django部署在Ubuntu18.04腾讯云主机上
    Mac中安装JDK1.8和JDK11双版本并任意切换
    Nginx完美解决前后端分离端口号不同导致的跨域问题
    Mac系统安装Tomcat服务器
    Python将数据渲染到docx文档指定位置
    IO多路复用select/poll/epoll详解以及在Python中的应用
    Tornado框架实现异步爬虫
    广州商学院Python正方教务系统爬虫(获取个人信息成绩课表修改密码)
    Python3使用tkinter编写GUI程序
  • 原文地址:https://www.cnblogs.com/wuyw/p/5535345.html
Copyright © 2011-2022 走看看