zoukankan      html  css  js  c++  java
  • 软件工程课堂练习找水王

    • 题目
      三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
    • 要求

      如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

    • 思路

      由于题目已经告诉我们水王的帖子数目超过了帖子总数的一半,所以对帖子做如下处理:

    1. 如果相邻两帖子ID不同,则抵消,不做其他处理。
    2. 如果相邻两帖子ID相同,则为嫌疑水王。再和当前水王比较,若和当前水王相同,当前水王水的可能性+2;若和当前水王不相同,当前水王水的可能性-2;若当前没有水王,那么嫌疑水王就做为水王。
    3. 如果当前水王水的可能性>0,那么就是水王,如果当前水王水的可能性=0,那么当前水王也就不是水王,再返回1。
    4. 最后的当前水王且水的可能性>0,那么他就是水王,否则没有水王。

       对帖子数的奇偶分别处理,奇数的话单独对第一个id进行处理,偶数不做处理。

      1 #include <iostream>
      2 using namespace std;
      3 int main()
      4 {
      5     int id[1000];    //发帖ID
      6     int waterKing;     //当前水王
      7     int value = 0;        //当前水王水的可能性
      8     int num;       //帖子数
      9     cout << "请输入帖子数:";
     10     cin >> num;
     11     if (num <= 0)
     12     {
     13         cout << "非法的输入";
     14         exit(1);
     15     }
     16 
     17     cout << "请输入发帖的ID:" << endl;
     18     for (int i = 0; i < num; i++)
     19     {
     20         cin >> id[i];
     21     }
     22 
     23     if (num % 2)    //奇数
     24     {
     25         /*waterKing = id[0];
     26         value = 1;*/
     27         for (int i = 1; i < num; i+=2)
     28         {
     29             if (value > 0)     //当前水王存在
     30             {
     31                 if (id[i] == id[i + 1])
     32                 {
     33                     if (id[i] == waterKing)
     34                     {
     35                         value += 2;
     36                     }
     37                     else
     38                     {
     39                         value -= 2;
     40                     }
     41                 }
     42             }
     43             else             //当前水王不存在
     44             {
     45                 if (id[i] == id[i + 1])
     46                 {
     47                     waterKing = id[i];
     48                     value += 2;
     49                 }
     50             }        
     51         }
     52 
     53         if (value > 0)    // 对第一个id单独处理
     54         {
     55             if (id[0] == waterKing)
     56             {
     57                 value++;
     58             }
     59             else
     60             {
     61                 value--;
     62             }
     63         }
     64         else
     65         {
     66             waterKing = id[0];
     67             value = 1;
     68         }
     69     }
     70     else         //偶数
     71     {
     72         for (int i = 0; i < num; i+=2)
     73         {
     74             if (value > 0)     //水王存在
     75             {
     76                 if (id[i] == id[i + 1])
     77                 {
     78                     if (id[i] == waterKing)
     79                     {
     80                         value += 2;
     81                     }
     82                     else
     83                     {
     84                         value -= 2;
     85                     }
     86                 }
     87             }
     88             else            //水王不存在
     89             {
     90                 if (id[i] == id[i + 1])
     91                 {
     92                     waterKing = id[i];
     93                     value += 2;
     94                 }
     95             }
     96         }
     97     }
     98 
     99     if (value > 0) 
    100     {
    101         cout << "水王ID为" << waterKing << endl;
    102     }
    103     else
    104     {
    105         cout << "没有水王!" << endl;
    106     }
    107     
    108 }

     代码测试

    http://www.cnblogs.com/xiaoxt/p/5511005.html

  • 相关阅读:
    正则表达式
    特殊符号作用
    sed
    scp
    EOF
    env
    JAVA进阶5
    JAVA进阶4
    JAVA进阶3
    JAVA进阶2
  • 原文地址:https://www.cnblogs.com/xiaoxt/p/5508849.html
Copyright © 2011-2022 走看看