课堂练习——寻找水王

1.问题明细

  三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。

  如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

 

2.设计思想

  ①从名单的第一位开始查找,假设第一位是水王,设定水王存在次数为1;

  ②按照名单,从“假设的水王”开始的下一个名字进行对比,若相同,则存在次数+1,若不存在,则存在次数-1;

  ③查看水王存在次数,若非0,则继续执行②,若为0,则当前不是水王,选定下一位为“假设的水王”,执行第①步;

  ④当查找结束后,最终保留下来的假设的水王就是真正的水王。

 

3.源代码

 1 public class WaterKing 
 2 {
 3     public static void main(String args[])
 4     {
 5         int N = 10;
 6         
 7         String ID[] = new String [N];
 8         ID[0]="Ben";
 9         ID[1]="Jerry";
10         ID[2]="Ben";
11         ID[3]="Dan";
12         ID[4]="Ben";
13         ID[5]="Ben";
14         ID[6]="Dan";
15         ID[7]="Ben";
16         ID[8]="Ben";
17         ID[9]="Tom";
18         
19         int number = 1 ,time = 0;
20         String name = ID[time];
21         
22         for(int i = 1;i < N;i++)
23         {
24             if(name == ID[i])
25             {
26                 number++;
27             }
28             else
29             {
30                 number--;
31                 if(number == 0)
32                 {
33                     time++;
34                     name = ID[time];
35                     i = time;
36                     number = 1;
37                 }
38             }
39         }
40         
41         System.out.println("论坛中的水王是:"+name+"。");
42     }
43 }

 

4.结果截图

 

 

5.实验心得

  解决问题时,要抓住问题的重点。比如当前问题中的关键就是:该水王的发帖数目超过了总帖数的一半,由此可以判断,名单里一半以上都是水王的名字,所以,我们就需要从第一位开始找,遇到相同名字就+1,遇到不同名字就-1,除了水王,其他人一定都会变为0,如果是水王的话,这样执行到最后结果一定会为正值,由此可以判断是水王。如若没有注意到这一关键,解决问题也就无从谈起。

posted @ 2016-05-19 17:43  YangLna  阅读(186)  评论(0编辑  收藏  举报