一、题目要求
UNIN队设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
二、设计思想
首先水王的特点是发帖数超过一半可能比一半多一个或者更多假如水王的帖子和别人的配对那么至少有一个帖子是单着的这就有了规律,先寻找一对挨着的水王的帖子,通过循环遍历数组俩相同让变量k加1不同k减1那么可通过初始化变量sw是1将当前数组元素赋给某一变量i++后当前变量和保存的上一个变量sw相同k++sw不变继续往下遍历,其它帖子ID也可能有相同但再次遍历条件下比不能坚持到最后,只有水王的ID超过总数一半能坚持保留到最后。
package waterking; import java.util.Scanner; public class Shuiwang { //主函数输入数据并存储数据 public static void main(String args[]) { @SuppressWarnings("resource") Scanner sc=new Scanner(System.in); System.out.println("请输入测试帖子数:"); int n=sc.nextInt();//n为帖子数 String userid[]=new String[n+1]; int i; System.out.println("请依次输入"+n+"个帖子的ID:"); for(i=0;i<n+1;i++) { userid[i]=sc.nextLine();//nextline自动换行 } String shuiwang = findshuiwang(userid, n);//调用函数 System.out.println("该水王的ID是 " + shuiwang); } public static String findshuiwang(String[] userid,int n)//接受ID数组,接受用户输入的帖子数n { int i,count = 0;//此计数器最终值用来判断目前ID是否为水王 String shuiwang = userid[0];//令第一个ID为水王 for(i=0;i<n;i++) { if(!shuiwang.equals(userid[i]))//如果与前一个ID不同,那么当前ID的计数器减1 { count=count-1; if(count<=0) //如果count=0时,说明目前这个ID和前一个ID暂时不是水王 { shuiwang=userid[i+1]; //说明目前ID不是水王,令目前ID的下一个ID为水王 count=1; //重新给计数器赋值为1或者0,这里我选择1 } } else { shuiwang=userid[i];//与前一个ID相同,说明当前ID暂时为水王 count=count+1;//计数器+1 } } return shuiwang;//返回水王ID } }