软件工程课堂作业(十五)——揪出“水王”续

一、题目:

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

二、设计思路:

      扩展题目和原题基本相似,方法是一样的,都可用消除思想。可以三个比较,若不相同,则删除,若相同,则计数器加一。

三、源代码:

 1 //找小“水王”——胡亚宝——2015/04/26
 2 
 3 #include "stdafx.h"
 4 #include"iostream"
 5  6 
 7 
 8 int _tmain(int argc, _TCHAR* argv[])
 9 {
10     int len;
11     int idsum[3]={0,0,0};
12     //int A[100];
13     int ID[3]={0,0,0};
14     printf("请输入发帖总和:");
15     scanf("%d",&len);
16     int * shuiwang=new int [len];
17     printf("请输入发帖人ID:");
18     for(int m=0;m<len;m++)
19     {
20         scanf("%d",&shuiwang[m]);
21     }
22 
23     for(int i=0;i<len;i++)
24     {
25         /*先将ID列表初始化,找出三个不同的ID*/
26         if(idsum[0]==0 && shuiwang[i]!=ID[1] && shuiwang[i]!=ID[2])
27         {
28             idsum[0]=1;
29             ID[0]=shuiwang[i];
30         }
31         else if(idsum[1]==0 && shuiwang[i]!=ID[0] && shuiwang[i]!=ID[2])
32         {
33             idsum[1]=1;
34             ID[1]=shuiwang[i];
35         }
36         else if(idsum[2]==0 && shuiwang[i]!=ID[0] && shuiwang[i]!=ID[1])
37         {
38             idsum[2]=1;
39             ID[2]=shuiwang[i];
40         }
41         /*开始进行查找,不同标志idsum+1,相同标志-1*/
42         else if(shuiwang[i]!=ID[0] && shuiwang[i]!=ID[1] && shuiwang[i]!=ID[2])
43         {
44             idsum[0]--;
45             idsum[1]--;
46             idsum[2]--;
47         }
48         else if(shuiwang[i]==ID[0])
49         {
50             idsum[0]++;
51         }
52         else if(shuiwang[i]==ID[1])
53         {
54             idsum[1]++;
55         }
56         else if(shuiwang[i]==ID[2])
57         {
58             idsum[2]++;
59         }
60         
61     }
62 
63     
64     printf("%d	%d	%d	
",ID[0],ID[1],ID[2]);
65     
66     return 0;
67 }

四、运行结果:

五、心得体会:

      这次的扩展问题和之前的问题类似,方法都是一样,几个地方稍加修改就能解决这个问题。

      虽然方法一样,但是在处理这个问题时具体的方法还是有不同,比如计数器的改变、一个人变成了三个人,将这三个人看成一个整体等。在解决的过程中,我对这个问题有了更深的了解,对之前的解决方法也更了解了。

原文地址:https://www.cnblogs.com/huyabaoboke/p/4457995.html