蓝桥小朋友崇拜圈 JAVA暴解

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

小朋友编号为1,2,3,…N
输入第一行,一个整数N(3<N<100000)
接下来一行N个整数,由空格分开。
要求输出一个整数,表示满足条件的最大圈的人数。
例如:
输入:
9
3 4 2 5 3 8 4 6 9
则程序应该输出:
4
输入:
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

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Demo9崇拜圈 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();         //接受用户输入的数字
		int[] arr = new int[n];            //定义数组保存用户输入的数字
		for (int i = 0; i < n; i++) {
			arr[i] = scanner.nextInt();    
		}
		int max = 0;                       //定义最大崇拜圈
		for (int i : arr) {                //遍历arr数组
			List<Integer> list = new ArrayList<Integer>();  //定义list集合
			int x = i;                     //x替换i
			int count = 0;                 //临时变量,统计符合崇拜人数
			while (!list.contains(x)) {    //判断x是否存在于集合里,不存在则进入循环
				list.add(x);               //将x存入集合中
				x = arr[x - 1];            //寻找下一个崇拜的人(核心代码)
				count++;                   //统计人数
			} 
			if (count > max) {             //如果临时统计大于max
				max = count;               //count值给max
			}
		}
		System.out.println(max);          //输出即可
	}
}

小剧场:今天不想跑,所以才去跑,这才是长距离跑着的思维方式。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值