三个水王

一、题目

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

二、设计思路

          这次找的是三个水王。

    1、可以对帖子进行统计,数量最多的三个帖子为水王,但是这需要特别大的空间复杂度,不适用。

    2、既然三个水王都大于四分之一,那么,一次消掉4个不同的帖子,最后一定会剩下不同数量的三个水王的帖子,

三、源代码

 1 #include<iostream.h>
 2 int main()
 3 {
 4       int ID[10]={1,2,3,4,1,2,3,1,2,3};
 5       int ID_NULL;//定义一个不存在的ID
 6       int shui[3];
 7       int flag[3];
 8      int i;
 9       shui[0]=shui[1]=shui[2]=0;
10      flag[0]=flag[1]=flag[2]=ID_NULL;
11      for(i=0;i<10;i++)
12      {
13          if(ID[i]==flag[0])
14          {
15               shui[0]++;
16          }
17          else if(ID[i]==flag[1])
18          {
19               shui[1]++;
20         }
21         else if(ID[i]==flag[2])
22          {
23               shui[2]++;
24          }
25          else if(shui[0]==0)
26          {
27               shui[0]=1;
28               flag[0]=ID[i];
29          }
30          else if(shui[1]==0)
31          {
32               shui[1]=1;
33               flag[1]=ID[i];
34          }
35          else if(shui[2]==0)
36          {
37               shui[2]=1;
38               flag[2]=ID[i];
39          }
40          else
41         {
42              shui[0]--;
43               shui[1]--;
44               shui[2]--;
45           }
46      }
47      cout<<"小水王是:"<<endl;
48      cout<<flag[0]<<"  "<<flag[1]<<"  "<<flag[2]<<endl;
49      return 0;
50  }

四、实验截图

  

五、实验总结

  从上次找一个水王到这次找三个水王,我们可以发现,如果对于一个问题只要找到合适的办法,就可以解决这一类问题的办法,这就要在解决问题时能够做到举一反三,这样我们在遇到类似的问题时就能做到迎刃而解。比如说这两次找水王问题的解决,都发现找n个水王那么着n个水王发帖个数就会超过总帖数的1/(n+1),那么我们就可以总结出找出n个水王时的解决办法。

 

posted @ 2015-06-18 10:36  小崔007  阅读(195)  评论(0编辑  收藏  举报