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

    一.题目:

    1 三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
    2 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?(参考核心代码)
    3 随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
     
    二.设计思想
           有三个水王都超过了发帖总数的1/4,那么剩下的就不会超过1/4,
           由此可以分析,如果每次比较,去除其中不相同的三个数据,那么,跟去除找到其中超过1/2的ID数的解法是一样的。
     
    三.源代码:
     
     
     1  #include"iostream"
     2  using namespace std;
     3  void Data(int l,int A[]); 
     4  int main()
     5  {
     6      int l;//长度
     7      int target[3]={0,0,0};
     8      int ID[3]={-1,-1,-1};       
     9      cout<<"请输入帖子数量:";
    10      cin>>l;
    11      int * shuitong=new int [l];
    12      Data(l,shuitong);
    13      for(int i=0;i<l;i++)
    14      {
    15          
    16          if(target[0]==0 && shuitong[i]!=ID[1] && shuitong[i]!=ID[2])
    17          {
    18              target[0]=1;
    19              ID[0]=shuitong[i];
    20          }
    21          else if(target[1]==0 && shuitong[i]!=ID[0] && shuitong[i]!=ID[2])
    22          {
    23              target[1]=1;
    24              ID[1]=shuitong[i];
    25          }
    26          else if(target[2]==0 && shuitong[i]!=ID[0] && shuitong[i]!=ID[1])
    27          {
    28              target[2]=1;
    29              ID[2]=shuitong[i];
    30          }
    31          
    32          else if(shuitong[i]!=ID[0] && shuitong[i]!=ID[1] && shuitong[i]!=ID[2])
    33          {
    34              target[0]--;
    35              target[1]--;
    36              target[2]--;
    37          }
    38          else if(shuitong[i]==ID[0])
    39          {
    40              target[0]++;
    41          }
    42          else if(shuitong[i]==ID[1])
    43          {
    44              target[1]++;
    45          }
    46          else if(shuitong[i]==ID[2])
    47          {
    48              target[2]++;
    49          }
    50          
    51      }
    52      cout<<"水桶为:"<<ID[0]<<endl;
    53      cout<<"水桶为:"<<ID[1]<<endl;
    54      cout<<"水桶为:"<<ID[2]<<endl;
    55      return 0;
    56  }
    57  void Data(int l,int A[])
    58 
    59 {
    60      
    61        cout<<"请输入符合条件的ID列表:"<<endl;
    62      
    63        for(int i=0;i<l;i++)
    64      
    65        {
    66          
    67           cin>>A[i];
    68      
    69        }
    70 
    71 }
    四、实验截图:

    五、实验总结

    检验一个问题是否掌握就可能就是再出一个同类型但是比原来高级的题来验证,所以我觉得我还是学的不够深入,没有理解到位。

    见微知著,做学问,一定要深入,这是这次实验得到的最宝贵的教训。

    其实这道题还真是跟水王问题非常像,就如同消消乐一样,就是消掉两个还是消掉三个的问题。

  • 相关阅读:
    [buuctf] pwn-第五空间2019pwn
    [buuctf] pwn-[OGeek2019]babyrop
    [buuctf] pwn-ciscn_2019_c_1
    [buuctf] pwn-jarvisoj_level0
    wamp集成环境配置php7.x连接mssql
    EXCEL小技巧之单击单元格实现自增
    Asuhe博客转移
    数据链路层中的最小帧长是如何计算出来的?
    CSMA/CD协议中如何确定数据重传时机?
    Cache设计
  • 原文地址:https://www.cnblogs.com/zhangyao999/p/5544806.html
Copyright © 2011-2022 走看看