• 课堂作业-找水王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.实验总结:

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

  • 相关阅读:
    最小生成树Prim算法和Kruskal算法(转)
    tarjan有向图的强连通
    匈牙利算法
    字符类数组的常用函数
    三层登录——C#版
    监考风波
    SQL Server 2012 安装——安装 OR 卸载
    SQL Server 2012安装——.net framework 3.5离线安装
    坚定自我 守住寂寞
    浅谈三层
  • 原文地址:https://www.cnblogs.com/jianglingjun/p/5535508.html
Copyright © 2020-2023  润新知