找水王1

一、题目与要求

  • 题目、三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
  • 要求、如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

二、设计思想

  排序法:由于该“水王”发帖数目超过了帖子数目的一半,将列表中的ID从小到大进行排序,则中间的ID即为水王。但由于其时间复杂度不满足要求,因此需要采用更便捷的方法。

  每次删除两个不同的数,因为“水王”发帖数过半,因此删除这俩数后“水王”发帖数依旧过半,若两ID相同则利用标志key++,key>0且两ID不同时key--。

三、源代码

 1 //找水王,信1301-1,李青 2016/5/20
 2 #include<iostream>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int key = 0;
 8     int king = 0;
 9     int i = 0;
10     int array[] = { 5, 5, 3, 5, 3, 3, 5, 5, 3, 3, 4, 3, 2, 3, 5, 3, 7, 5, 3, 2, 5};
11     for (i = 0; i<20; i++)
12     {
13         if (key == 0)
14         {
15             king = array[i];
16             cout << "目前的水王是:" << array[i] << endl;
17             key = 1;
18         }
19         else
20         {
21             if (king == array[i])
22             {
23                 key++;
24             }
25             else
26             {
27                 key--;
28             }
29         }
30     }
31     cout << "水王的ID是:" << king<< endl;
32     return 0;
33 }

四、运行结果:

五、心得体会

  这次找水王的程序体现了代码优化的一个重要思想,那就是对于问题的深入分析是优化的前提,由题目我们可以知道,水王是发帖数超过一半的人,所以只要由小到大排序,中间的ID就是水王的ID,但是这样做并不是较为优质的解法,通过比较并删除不同的ID最后得到的也是水王的ID,这种解法就比较符合简洁、高效的原则了。

posted on 2016-05-20 18:57  gsdrkj  阅读(141)  评论(0)    收藏  举报

导航