课堂练习找水王续

•三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
•如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的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();

    }
}

实现截图

个人总结
学会结合以前的知识,整合思路,参考了一些同学的代码
原文地址:https://www.cnblogs.com/qianxia/p/5521297.html