• Java实现第九届蓝桥杯小朋友崇拜圈


    小朋友崇拜圈

    题目描述
    班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。
    在一个游戏中,需要小朋友坐一个圈,
    每个小朋友都有自己最崇拜的小朋友在他的右手边。
    求满足条件的圈最大多少人?

    小朋友编号为1,2,3,…N
    输入第一行,一个整数N(3<N<100000)
    接下来一行N个整数,由空格分开。

    要求输出一个整数,表示满足条件的最大圈的人数。

    例如:
    输入:
    9
    3 4 2 5 3 8 4 6 9

    则程序应该输出:
    4

    解释:
    如图p1.png所示,崇拜关系用箭头表示,红色表示不在圈中。
    显然,最大圈是[2 4 5 3] 构成的圈

    再例如:
    输入:
    30
    22 28 16 6 27 21 30 1 29 10 9 14 24 11 7 2 8 5 26 4 12 3 25 18 20 19 23 17 13 15

    程序应该输出:
    16

    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗 < 1000ms

    请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    不要使用package语句。不要使用jdk1.7及以上版本的特性。
    主类的名字必须是:Main,否则按无效代码处理。

    在这里插入图片描述

    package 蓝桥杯;
    
    import java.util.HashSet;
    import java.util.Scanner;
    import java.util.Set;
    
    public class 小朋友崇拜圈 {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		int[] num = new int[n+1];
    		for (int i = 1; i <=n; i++) {
    			num[i]=sc.nextInt();
    		}
    		sc.close();
    		//记录当前的下标	 当前圈的大小	最大的圈有多少人
    		int index=1,count=0,	max=-1;;
    		Set<Integer> set=new HashSet<Integer>();
    		boolean[] bool = new boolean[n+1];
    		while(true){
    			//能添加进去,说明里面没有重复的,可以加
    			if(set.add(index)){
    				//当前圈的数量+1
    				count++;
    				//当前人被用过了
    				bool[index]=true;
    				//替换下标
    				index=num[index];
    				continue;
    			}
    			else{
    				//证明找到圈,与最大圈的人数比较
    				max=Math.max(max, count);
    				//上个圈的记录清空
    				count=0;
    				set.clear();
    				//从1开始找没有被访问过的人,用没访问过的人去继续找圈,循环
    				for (int i = 1; i <=n; i++) {
    					if(!bool[i]){
    						index=i;
    						break;
    					}
    					//如果找到最后一个人都被访问过,证明全部被访问过,直接跳出
    					if(i==n){
    						 System.out.println(max);
    						 return;
    					}
    				}
    			}
    			
    		}
    		
    	}
    
    }
    
    
    package Lqb;
    
    public class Text35 {
    	static int N=30;	//N个小朋友
    	static int max=0;
    	static String maxStr="";
    	public static void main(String[] args) {
    		String str="22 28 16 6 27 21 30 1 29 10 9 14 24 11 7 2 8 5 26 4 12 3 25 18 20 19 23 17 13 15"; 	//N个小朋友对应崇拜的对象
    		String quang="";		//崇拜圈临时变量
    		String[] arr=str.split(" ");
    		for(int i=0;i<arr.length;i++){
    			quang=i+1+" ";
    			dg(i+1,quang,arr);
    		}
    		System.out.println("最大圈="+max+"  ["+maxStr+"]");
    	}
    	public static void dg(int i,String quang,String[] arr){
    		if(quang.split(" ")[0].equalsIgnoreCase(arr[i-1])){	//找到圈
    			//System.out.println("找到圈= "+quang);
    			if(quang.split(" ").length>max){
    				 max=quang.split(" ").length;
    				 maxStr=quang;
    			}
    			return;
    		}
    		quang+=arr[i-1]+" ";
    		//System.out.println(quang);
    		if(!quang.split(" ")[0].equalsIgnoreCase(arr[i-1])&&quang.split(" ").length>N){	//死循环圈
    			return;
    		}
    		dg(Integer.parseInt(arr[i-1]),quang,arr);
    	}
    }
    
    
  • 相关阅读:
    WINCE6.0 error C2220: warning treated as error问题解决
    GPRS连接失败问题
    wince下sourcessources.cmnMakefile.def的相关作用
    IMX515开发备忘
    WINCE补丁包下载地址
    IMX51+WINCE6.0平台缩写意义
    喵哈哈村的魔法考试 Round #1 (Div.2) ABCD
    Codeforces Round #402 (Div. 2) D
    Codeforces Round #402 (Div. 2) C
    Codeforces Round #402 (Div. 2) B
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947769.html
Copyright © 2020-2023  润新知