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

    问题:

    三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
    如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
    解题思路:
    最简单的思路是:我们通过遍历寻找每个id出现的次数,然后比较哪个id出现的次数最多,哪个就是水王。但是这样做比较麻烦,运行速度也比较慢。所以,运用一种比较简单的方法,我们知道水王的帖子数超过半数,所以我们可以用相连的两个id进行比较,如果不同则删除这两个id,剩下的最后一个id就是超过半数的那个id
     1 #include<iostream>
     2 using namespace std;
     3 #define N 100
     4 int main()
     5 {
     6     int ID[N];//发帖者ID
     7     int i,a,count=0;//计数变量,帖子的数量,设置水王出现次数初始化
     8     int water_king;
     9     cout << "输入帖子的数量:" << endl;
    10     cin >> a;
    11     if (a <= 0)
    12     {
    13         cout << "输入的帖子数量不正确,请重新输入:" << endl;
    14         cin >> a;
    15         while (a < 0)
    16         {
    17             cout << "输入的帖子数量不正确,请重新输入:" << endl;
    18             cin >> a;
    19         }
    20     }
    21     cout << "输入发帖者id号:" << endl;
    22     for (i = 0; i<a; i++)
    23     {
    24         cin >> ID[i];
    25     }
    26     //寻找水王ID过程
    27     for (i = 0; i<a; i++)//遍历a次
    28     {
    29         if (count == 0)    //初始时,把数组第一个元素赋给ShuiWang,如果count为0,代表前i-1个中元素两两消完,重新赋值
    30         {
    31             water_king = ID[i];
    32             count = 1;
    33         }
    34         else
    35         {
    36             if (water_king == ID[i])//相同则计数加1,不同则减一
    37             {
    38                 count++;
    39             }
    40             else
    41                 count--;
    42         }
    43     }
    44     cout << "水王的id是:" << water_king << endl;
    45     return 0;
    46  }

    测试结果:

     
  • 相关阅读:
    Linux_DNS服务器
    Linux_DNS服务器
    Linux_FTP服务器
    Linux_FTP服务器
    Linux_DHCP&DHCP Relay
    分布式内存存储式元数据服务的构建
    如何提高分布式系统的可观察性:Insight Tool的引入
    论分布式系统中Metric框架的设计
    分布式存储系统关于GDPR条例中的数据清除原则
    Pipeline并行处理模型
  • 原文地址:https://www.cnblogs.com/apan008/p/5515050.html
Copyright © 2011-2022 走看看