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