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

    一、题目

    三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
    如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
    二、设计思路
    课上老师给出了“消消乐”思路,根据这个思路,将ID存入一个数组中,从第一个开始与后面的比较,不相同则“消去”,因为水王的ID出现次数超过一半,所以消去后剩下的ID就是水王的ID。课上与同学讨论的的方法是用一个变量来计数以实现“消除”。
    三、代码
     1 #include <iostream.h>
     2  
     3  int main()
     4  {
     5      int a[100];
     6      int i,j,k=1;
     7      int shui;
     8      cout<<"假设有10个ID,";
     9      for(i=0;i<10;i++)
    10      {
    11          cout<<"请输入第"<<i+1<<"个ID:"<<endl;
    12          cin>>a[i];
    13      }
    14      shui=a[0];
    15      for(i=1;i<10;i++)
    16      {
    17          if(shui!=a[i])
    18          {
    19              k=k-1;
    20              if(k<0)
    21              {
    22                  shui=a[i+1];
    23                  k=1;
    24                  i++;
    25              }
    26          }
    27          else
    28          {
    29              shui=a[i];
    30              k=k+1;
    31          }
    32      }
    33      cout<<"水王的ID是:"<<shui<<endl;
    34      return 0;
    35  }

    四、运行结果截图

    五、总结

    这道题继续是优化问题,如果通过遍历计数,比较所有出现的ID数目找出最多的也可实现,但时间复杂度高,不是最优算法。算法优化有很长的路,应该多想好的方法,平时编写也该注意寻找更优的算法。

  • 相关阅读:
    jichu
    scanf
    数位dp
    hdu 5667
    华东交通大学2018年ACM“双基”程序设计竞赛 K
    华东交通大学2018年ACM“双基”程序设计竞赛 D
    map
    次小生成树
    set
    c++11之为什么C++11引入了std::ref?
  • 原文地址:https://www.cnblogs.com/dr73/p/4448171.html
Copyright © 2011-2022 走看看