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

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

    一、设计思路

    (1)输入发帖ID记录表

    (2)从第一个ID开始,与后续的发帖ID进行比较,若相同计数器则加一,否则减一。若计数器的数值被减为零,则重新选取当前ID开始记录比较。

    (3)输出结果

    二、源代码

    #include<iostream>
    using namespace std;

    int FindWaterK(int IDNumber[],int m,int &waterking)
    {

    int c=0,c1=0; //计数
    for(int i=0;i<m;i++)
    {
    if(c==0) //计数等于0
    {
    waterking=IDNumber[i]; //当前的ID为水王
    c++; //计数加1
    c1=0;
    c1++;
    }
    else //若计数不等于0
    {
    if(waterking==IDNumber[i]) //当前ID等于水王
    {
    c++; //计数加1
    c1++;
    }

    else
    c--; //计数减1
    }
    }
    return c1;

    }
    int main(){

    int IDNumber[100]; //存放帖子ID
    int n,waterking,num; //帖子数量,水王,相同帖子数目
    cout<<"请输入帖子数量:"<<endl;
    cin>>n;
    cout<<"请输入帖子ID:"<<endl;
    for(int i=0;i<n;i++)
    {
    cin>>IDNumber[i];
    }
    num=FindWaterK(IDNumber,n,waterking);
    if(num>(n/2))
    cout<<"水王是:"<<waterking<<endl;
    else
    cout<<"没有水王!!!"<<endl;

    }

    三、实验截图

    四、个人总结

         一开始的对题目的理解不是很透彻,在老师课堂上稍加提示之后了解了改题目的大致意思,按照一般思想就是每个遍历一遍,但是时间复杂度会很大,肯定有更加的简单方法,思索之后,可以将相邻的两个数字进行比较,相同的话保留,不相同则清除一位,照着这种想法进行下去,慢慢有了答案。

       

  • 相关阅读:
    20151225jquery学习笔记---编辑器插件
    20151225jquery学习笔记---折叠菜单UI
    hihocoder1078 线段树的区间修改
    hihocoder1067 最近公共祖先·二
    poj1857 To Europe! To Europe!
    PKU_campus_2017_K Lying Island
    PKU_campus_2018_H Safe Upper Bound
    PKU_campus_2018_D Chocolate
    poj3254 Corn Fields
    poj2441 Arrange the Bulls
  • 原文地址:https://www.cnblogs.com/GloryYT/p/5504179.html
Copyright © 2011-2022 走看看