代码改变世界

寻找小水王

2016-05-27 14:09  LUXIN123  阅读(154)  评论(0编辑  收藏  举报
 1 #include<iostream>
 2 using namespace std;
 3  
 4 void Waterking_find(int ID[],int num)                 
 5 {
 6     int waterking[3]={0,0,0};
 7     int count[3]={0,0,0};
 8     for(int i=0;i<num;i++)
 9     {
10         if(count[0]==0&&ID[i]!=waterking[1]&&ID[i]!=waterking[2])
11         {
12             waterking[0]=ID[i];
13             count[0]++;
14         }
15         if(count[1]==0&&ID[i]!=waterking[0]&&ID[i]!=waterking[2])
16         {
17             waterking[1]=ID[i];
18             count[1]++;
19         }
20         if(count[2]==0&&ID[i]!=waterking[0]&&ID[i]!=waterking[1])
21         {
22             waterking[2]=ID[i];
23             count[2]++;
24         }
25         if(ID[i]==waterking[0])
26         {
27             count[0]++;
28         }
29         if(ID[i]==waterking[1])
30         {
31             count[1]++;
32         }
33         if(ID[i]==waterking[2])
34         {
35             count[2]++;
36         }
37         if(ID[i]!=waterking[0]&&ID[i]!=waterking[1]&&ID[i]!=waterking[1])
38         {
39             count[0]--;
40             count[1]--;
41             count[2]--;
42         }
43 
44     }
45     cout<<"这三个水王分别是:"<<waterking[0]<<" "<<waterking[1]<<" "<<waterking[2]<<endl;
46 }
47 int main()
48 { 
49     int Num;
50     int ID[14];
51     cout<<"请输入发帖子的数量:"<<endl;
52     cin>>Num;
53     cout<<"输入发送每个帖子的ID:"<<endl;
54     for(int i=0;i<Num;i++)
55     {
56         cin>>ID[i];
57     }
58     Waterking_find(ID,Num);
59     return 0;
60 }

 

一、题目

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

二、实验思路:

    1、定义waterking[]来指定水王,count[]数组用来对三个水王的个数进行计数。

    2、给出所有的ID数,先找出前三个不同的数本别设定为三个不同的小水王

 3、继续向后遍历其他的数,若遇到其中的一个水王,则那个水王的count[i]+1,若遇到与三个水王都不同的数,三个水王的count[]—1,若其中的某个水王的count[]减为0时,将遍历到的数设置为新的水王,遍历到最后,找到三个小水王。

三、实验截图

四、实验总结:

我感觉这次实验和和上一次的思路基本相同,只是增加了水王的个数,但是我们就觉得难了很多,一开始就没有想出来。我觉得有些题目的思路是相通的,我们要耐心研读,找出解题的入口。