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

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

    设计思想:

    下面是找水王1的设计思想:

         这是一个查找数组中出现频率最高值的问题,不一样的是已知条件中有一点为出现频率最高值出现频率大于0.5。

         按照常规思路可以逐个统计出现过的每个ID出现过的次数。本次作业要求新思路,即

              1.计第一个shuiwangId=ID[0]出现过Times=1次;

              2.遍历下一个ID,如果跟shuiwangId相同,Times++,否则,Times--。如果nTimes == 0,重复第一步;

              3.遍历结束,shuiwangId就是水王ID。

          这次与之不同的是,水王数量变成了3个。上述算法仍可延续,但需做修改,由于三个水王相互之间不冲突,故可定义三个水王,再与其它ID相抵消。

    具体思路如下:

          1.设三个水王ID:shuiwang1、shuiwang2、shuiwang3个出现过分别Times1=Times2=Times3=0次;

          2.遍历下一个ID并与三个水王ID比较,如果跟shuiwangN相同,TimesN++,否则,Times1、Times2、Times3均减一。

          3.如果某一shuiwangN出现的次数TimesN==0并且当前遍历的ID与之不同,将当前遍历的ID设为这一shuiwangN的ID,并使TimesN=1。继续第二步,直到遍历结束。

          4.遍历结束,shuiwang1、shuiwang2、shuiwang3分别是三个水王的ID。

    代码:

     1 #include<iostream>
     2 #include<fstream>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {
     7     ifstream IDFile("ID.txt");
     8     string buffer;
     9     string shuiwang1 = "";
    10     string shuiwang2 = "";
    11     string shuiwang3 = "";
    12     int IdNum = 0;;
    13     int Times1 = 0;
    14     int Times2 = 0;
    15     int Times3 = 0;
    16     cout << "ID列表:";
    17     for (;;)
    18     {
    19         if (IDFile.eof())
    20         {
    21             break;
    22         }
    23         IDFile >> buffer;
    24         IdNum += 1;
    25         cout << endl << buffer;
    26         if (shuiwang1 == buffer)
    27         {
    28             Times1 += 1;
    29         }
    30         else if (shuiwang2 == buffer)
    31         {
    32             Times2 += 1;
    33         }
    34         else if (shuiwang3 == buffer)
    35         {
    36             Times3 += 1;
    37         }
    38         else if (Times1 == 0)
    39         {
    40             Times1 += 1;
    41             shuiwang1 = buffer;
    42         }
    43         else if (Times2 == 0)
    44         {
    45             Times2 += 1;
    46             shuiwang2 = buffer;
    47         }
    48         else if (Times3 == 0)
    49         {
    50             Times3 += 1;
    51             shuiwang3 = buffer;
    52         }
    53         else
    54         {
    55             Times1 -= 1;
    56             Times2 -= 1;
    57             Times3 -= 1;
    58         }
    59     }
    60     IDFile.close();
    61     cout << endl << "" << IdNum << "贴。" << endl << endl << "水王1ID:" << shuiwang1 << endl << "水王2ID:" << shuiwang2 << endl << "水王3ID:" << shuiwang3 << endl;
    62     return 0;
    63 }
    View Code

    截图:

    个人总结:

          虽然题目有变化,但算法都是相通的。遇到新题目先想想有没有可以套用的算法,既能解决问题,又能加深对算法的理解和对实际问题的分析能力。

  • 相关阅读:
    The bean ‘XXXXX.FeignClientSpecification‘ could not be registered.
    爱数产品
    RSA加解密时报algid parse error, not a sequence错误
    PostgreSQL 查看数据库,索引,表,表空间大小
    Vue3工程示例
    Vue3工程用Vue2示例
    Vue工程添加组件调用
    Vue 项目结构
    命令行创建Vue项目
    Vue 自定义指令
  • 原文地址:https://www.cnblogs.com/ning-JML/p/5535605.html
Copyright © 2011-2022 走看看