三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
1.设计思想
因为“水王”发帖数超过了一半,将相邻两两不同的ID消除,则剩下的为“水王”的ID。用一个一维数组a[]存储所有ID,令“水王”ID为数组中的第一个a[0],用一个整型j记录水王ID出现次数,相邻数比较相同则j++,不同则j- -,并且如果j<=0,则对水王换ID,进行循环判断,直至循环结束。
源代码:
1 package shuiwang; 2 import java.util.*; 3 4 public class Find_shuiwang { 5 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 Find_function function = new Find_function(); 9 Scanner sca=new Scanner(System.in); 10 System.out.println("输入帖子数:"); 11 int n=sca.nextInt(); 12 String post[]=new String[n+1]; 13 14 int i; 15 System.out.println("输入帖子ID:"); 16 for(i=0;i<n+1;i++) 17 { 18 post[i]=sca.nextLine(); 19 } 20 String shuiwang = function.find(post, n); 21 System.out.println("水王ID是 " + shuiwang); 22 } 23 24 }
1 package shuiwang; 2 3 public class Find_function { 4 String find(String[] post,int n) 5 { 6 int i,j = 0; 7 String shuiwang = post[0];//令第一个ID为水王 8 for(i=0;i<n;i++) 9 { 10 if(!shuiwang.equals(post[i])) 11 { 12 j=j-1; 13 if(j<=0) //如果j=0时,之前的ID一定有一半以上不是水王,所以消去的至多有一半水王 14 { 15 shuiwang=post[i+1]; //在剩下的ID中继续寻找 16 j=1; //重新定义水王ID出现次数 17 i++; 18 } 19 } 20 else 21 { 22 shuiwang=post[i]; 23 j=j+1;//水王帖子数 24 } 25 } 26 return shuiwang; 27 } 28 }
结果截图: