•三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
•随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
设计思想
之前“水王”发帖数目超过了帖子数目的一半,因此每次删除两个不同的ID,直到剩下的所有ID都相同,那么剩下的就是水王的ID。
而由于这次找的是三个水王,就变成了删除三个不同的ID
代码实现
package 水王; import java.util.Scanner; public class sw2 { public static void find(int p[],int n,int water[]) { int c[]=new int [3]; c[0]=c[1]=c[2]=0; water[0]=water[1]=water[2]=-1; for(int i=0;i<n;i++) { if(c[0]==0) { c[0]++; water[0]=p[i]; } else if(c[1]==0) { c[1]++; water[1]=p[i]; } else if(c[2]==0) { c[2]++; water[2]=p[i]; } else if(p[i]==water[0]) { c[0]++; } else if(p[i]==water[1]) { c[1]++; } else if(p[i]==water[2]) { c[2]++; } else { c[0]--; c[1]--; c[2]--; } } } public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner sc =new Scanner(System.in); System.out.println("请输入ID的个数:"); int n=sc.nextInt(); int p[]=new int[10000]; int waterID[]=new int[3]; System.out.println("请输入ID"); for(int i=0;i<n;i++) { p[i]=sc.nextInt(); } find(p,n,waterID); System.out.println("水王的ID是:"); for(int i=0;i<3;i++) { System.out.println(waterID[i]+" "); } System.out.println(); } }
实现截图
个人总结
学会结合以前的知识,整合思路,参考了一些同学的代码