课堂练习——寻找水王续

1.问题明细

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

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

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

 

2.设计思想

  解决思路与第一个基本相同,这次是找出发帖最多的三个人,就让这三个人组成一个队伍和其他人相比较,从而找出最多的。

  ①先设定三个String类型的变量,用以存放发帖最多的人名(初始值为空),并设定三个数字来表示这三个人名出现的次数;

  ②按照名单从第一位开始,按次序与三个变量进行比较,若与第一个相同,则第一个次数+1,二三同理,继续进行下一次循环;

  ③若与三个变量都不相同,则按次序判断三个数字是否为0,若第一个为0,则第一个次数变为1,且将此ID赋予给第一个变量,二三同理,继续进行下一次循环;

  ④若②③都不成立,则三个数字都-1,继续进行下一次循环。

  ⑤循环结束,三个变量存储的人名就是发帖最多的三个人,并进行输出;

 

3.源代码

 1 import java.util.*;
 2 
 3 public class WaterKing2 
 4 {
 5     public static void main(String args[])
 6     {
 7         @SuppressWarnings("resource")
 8         Scanner in = new Scanner(System.in);
 9         System.out.print("请输入论坛帖子名单人数:");
10         int number = in.nextInt();
11         String ID[] = new String [number];
12         System.out.println("请按顺序输入帖子名单: ");
13         for(int i = 0;i<number;i++)
14         {
15             ID[i] = in.next();
16         }
17         
18         String maxOne = "",maxTwo = "",maxThree = "";
19         int timeOne = 0,timeTwo = 0,timeThree = 0;
20         
21         for(int i = 0;i<number;i++)
22         {
23             if(maxOne == ID[i])
24             {
25                 timeOne++;
26             }
27             else if(maxTwo == ID[i])
28             {
29                 timeTwo++;
30             }
31             else if(maxThree == ID[i])
32             {
33                 timeThree++;
34             }
35             else if(timeOne == 0)
36             {
37                 maxOne = ID[i];
38                 timeOne = 1;
39             }
40             else if(timeTwo == 0)
41             {
42                 maxTwo = ID[i];
43                 timeTwo = 1;
44             }
45             else if(timeThree == 0)
46             {
47                 maxThree = ID[i];
48                 timeThree = 1;
49             }
50             else
51             {
52                 timeOne--;
53                 timeTwo--;
54                 timeThree--;
55             }
56         }
57         
58         System.out.println("发帖最多的3个ID为:"+maxOne+","+maxTwo+"和"+maxThree);
59     }
60 }

 

4.结果截图

 

 

5.个人总结

  这次作业是上一次的续,可以发现两者的解决办法存在相近性,都是找出存在次数最多的人。这就要求我们要学会借鉴之前学习到的方法,解决办法有些都是融会贯通的,需要我们不要仅仅是完成每次作业,而是要去从分把握住这次锻炼的机会,不仅锻炼自己的发散思维能力,还有就是记忆能力,要将原来的方法熟练掌握并应用,这才能使我们的水平得以提高。

转载于:https://www.cnblogs.com/Daddy/p/5520712.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值