•三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
•随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
设计思想
之前“水王”发帖数目超过了帖子数目的一半,所以直接找帖子数超过一半的ID即可,这次找第二个“水王”只需要在把ID的列表去掉原来的“水王”,再次寻找即可。
代码实现:
1 package finding; 2 import java.util.InputMismatchException; 3 import java.util.Scanner; 4 5 public class finding { 6 public static void main(String[] args) { 7 // TODO 自动生成的方法存根 8 for(int m=0;;) 9 { 10 int bug=0; 11 Scanner sc =new Scanner(System.in); 12 System.out.println("请输入ID的个数:"); 13 int n=sc.nextInt(); 14 System.out.println("请输入ID(为整数):"); 15 int ID[]=new int [n]; 16 try //捕捉输入错误 17 { 18 for(int i=0;i<n;i++) 19 { 20 ID[i]=sc.nextInt(); 21 } 22 } 23 catch(InputMismatchException e) 24 { 25 System.out.println("输入不合法!请输入整数!"); 26 bug=1; 27 } 28 if(bug!=1) 29 { 30 int shuiwang[]=new int [2]; 31 for(int l=0;l<2;l++) 32 { 33 shuiwang[l]=ID[0]; //从第一个ID开始,第一个即为水王 34 int temp=1; 35 for(int i=0;i<n-1;i++) 36 { 37 for(int j=i+1;j<n;j++) 38 { 39 if(shuiwang[0]==ID[j]) //当此时水王与下一个ID相同时,计数器temp+1 40 { 41 temp++; 42 } 43 } 44 if(temp<=n/2) 45 { 46 shuiwang[0]=ID[i+1]; //当temp小于总帖子数的一半时,换下一个ID为临时水王 47 } 48 } 49 for(int i=0;i<n-temp;i++) 50 { 51 for(int j=0;j<n;j++) 52 { 53 if(ID[j]!=shuiwang[0]) 54 { 55 ID[i]=ID[j]; 56 break; 57 } 58 59 } 60 } 61 n=n-temp; 62 } 63 System.out.println("水王是(发帖数超过总贴数一半的ID):"+shuiwang[0]+" "+shuiwang[1]); 64 } 65 System.out.println("继续寻找水王请按n,退出请输入s:"); 66 String s=sc.next(); 67 if(s.equals("s")) 68 System.exit(0); 69 else 70 continue; 71 sc.close(); 72 } 73 74 } 75 }
截图: