一、题目
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复
其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。 如果你有一张当前论坛的帖子(包括回帖)列表,其
中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
二、程序设计思路
因为“水王”发帖数超过了一半,将相邻两两不同的ID消除,则剩下的为“水王”的ID。用一个一维数组userid[]存储所有ID,令“水王”ID为
数组中的第一个userid[0],用一个整型j记录水王ID出现次数,相邻数比较相同则j++,不同则j- -,并且如果j<=0,则对水王换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
}
}
四、程序运行结果