找水王续

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

 

设计思路:

概要:三个小水王占总帖子数目的3/4以上,采用变形的二并法

定义int shui3】,存储小水王,在定义int  num3】,记录三个小水王出现的次数,将帖子中前三个贴主赋值给shui[3],num3】初始为0For循环从第四个帖子开始循环,结束条件,所有的帖子都运算了一次。循环体:判断发帖人是否与shui[3]中相同,如果是,则对应的numi++,否则判断是否有numi】小于0,如果有,则将该发帖人赋值给shuii】,如果numi】中没有小于0的数,则所有的num3】都--,此时判断是否有numi】小于0,如果有,则将该发帖人赋值给shuii

循环结束后,shui[3]中的值就是三个小水王。。

代码实现:

 1 //陈昌  20143051 
 2 //2016/05/24 找水王续
 3 #include<iostream>
 4 #include<string>
 5 using namespace std;
 6 void main()
 7 {
 8     string shui[3];//存储水王
 9     int num[3];//记录嫌疑水王的出现的次数
10     int NUM;
11     cout<<"请输入:";
12     cin>>NUM;
13     string *tie = new string[NUM];//这部分用于从键盘中输入发帖人
14     //string tie[12]={"a","a","a","a","b","b","b","b","c","c","c","c"};
15     for(int i=0;i<NUM;i++)
16     {
17         cout<<"输入"<<i+1<<"号贴主名:";
18         cin>>tie[i];
19     }//这部分用于从键盘中输入发帖人
20     
21     for(int i=0;i<3;i++)//初始化
22     {
23         shui[i]=tie[i];
24         num[i]=0;
25     }
26 
27     for(int yi=3;yi<12;yi++)//运算
28     {
29         bool piPei=false;//用于判断是否下一个是否匹配
30         for(int er=0;er<3;er++)//循环匹配判断
31         {
32             if(shui[er]==tie[yi])
33             {
34                 num[er]++;
35                 piPei=true;
36                 break;//匹配,停止循环
37             }
38         }
39         if(!piPei)//匹配不成功
40         {
41             bool er=false;//只替换一个shui
42             bool san=false;//用于判断是否有num【i】<0,有的话直接替换
43             for(int liu=0;liu<3;liu++)
44             {
45                 if(num[liu]<0)
46                     san=true;
47             }
48             if(!san)//没有num【i】<0,所有的num--
49             {
50                 for(int san =0;san<3;san++)
51                     num[san]--;
52             }
53             for(int si=0;si<3;si++)
54             {
55                 if (num[si]<0&&er==false)//只替换一个shui
56                 {
57                     shui[si]=tie[yi];
58                     num[si]=0;
59                     er=true;
60                 }
61             }
62         }
63     }
64     for(int wu=0;wu<3;wu++)//输出小水王
65     {
66         cout<<wu+1<<"号小水王:"<<shui[wu]<<endl;
67     }
68 }

 

结果截图:

 

个人总结:

  虽然一开始想到了主要的解题思路,而且也写出了设计思路,但是实际操作起来发现,然并卵,错了,此事并没有停下了整理思路,而是一个劲的寻找错误,到处设立断点,结果然并卵,自己看不下去;于是采用输出语句判断错误,经过一番周折,最终解决了,还是设计思路的问题。。。

 

posted @ 2016-05-26 10:30  TmT  阅读(135)  评论(0编辑  收藏  举报