课堂作业-找水王2

1.题目要求:
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,
有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
 
2.设计思路:
    因为三个小水王的ID在所有发帖ID中均超过1/4,所以初始化水王的时候可以用4个ID相比。如果所有ID序列排列在1-4的四个ID中出现相同ID名,那么就可以利用一个包含三个元素的数组初始化小水王ID;如果所有ID序列排列在1-4中无重复ID名,则在排列在4-8中寻找是否存在重复的ID名。以此循环直到找到在4个ID中出现重复的情况,就能对小水王ID初始化。
    计数数组water[i](i为0,1,2)分别为初始化的三个小水王ID进行计数(计数数组各元素初始化为0),进入循环如果出现重复ID就对对应的计数元素加1,如果出现与三个初始化小水王ID不同的ID名,那么计数数组中所有元素都-1。若某个计数数组元素变为0,而下一个进入循环的ID与先前初始化的小水王ID各不相同,那么此ID代替先前那个对应计数数组为0的小水王ID。
    循环结束,剩下的三个小水王ID名就是我们要找的水王。
 
3.程序源代码:
import java.util.*;
public class Findwaterking {
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入ID的个数:");
        int a=sc.nextInt();
        int ID[]=new int[a];
        System.out.println("请输入ID:");
        for(int i=0;i<a;i++)
        {
            ID[i]=sc.nextInt();
        }
        
        int idnull = -1;//定义一个不存在的ID
        int c[]=new int[3];//定义存储水王ID的数组
        int water[]=new int[3];//定义计数数组
        
        water[0]=water[1]=water[2]=0;
        c[0]=c[1]=c[2]=idnull;
        
        for(int i=0;i<a;i++)
        {
            if(ID[i]==c[0])
            {
                water[0]++;
            }
            else if(ID[i]==c[1])
            {
                water[1]++;
            }
            else if(ID[i]==c[2])
            {
                water[2]++;
            }
            else if(water[0]==0)
            {
                water[0]=1;
                c[0]=ID[i];
            }
            else if(water[1]==0)
            {
                water[1]=1;
                c[1]=ID[i];
            }
            else if(water[2]==0)
            {
                water[2]=1;
                c[2]=ID[i];
            }
            else
            {
                water[0]--;
                water[1]--;
                water[2]--;
            }
        }
        
        System.out.println("三个小水王分别是:");
        System.out.println(c[0]);
        System.out.println(c[1]);
        System.out.println(c[2]);
    }
}

4.实验结果截图:

5.实验总结:

拿到题目时不知所措,在稿纸上琢磨很久也没有得出如何设计算法,最后代码来源于网络,看懂后只能自愧不如...还是稳扎稳打从基础做起多看书多练习吧。

原文地址:https://www.cnblogs.com/jianglingjun/p/5535508.html