【蓝桥杯】【猴子选大王】

题目
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。
从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。
如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
输入格式:
输入在一行中给一个正整数N(≤1000)。
输出格式:
在一行中输出当选猴王的编号。
输入样例:
11
输出样例:
7

分析
使用数组模拟一圈猴子,下标代表编号,由于数组的下标是从0开始的,所以1N对应成数组的下标是0(N-1)
设计三个变量,一个下标变量,一个报数变量,一个记录还在圈子中的猴子数量的变量。。

源码

		public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		sc.close();
		
		int[] a = new int[N];
		int index = 0; 
		int i = 1; //报数变量
		int counter = N; //记录删除了多少个
		
		while(counter > 1) {
			
			if(a[index] == -1) {
				//说明是无效的猴子
			}else {
				//说明是有效的猴子
				
				//如果报数为3,就将元素的值置为-1,表示退出了圈子
				if(i == 3) {
					a[index] = -1;
					counter--; //猴子数量-1
				}
				
				//为下一次报数做准备
				i++;
				if(i==4) {
					i=1;
				}
			}
			
			//指向下一个元素
			index++;
			if(index == N) {
				index = 0;
			}
			
		}
		
		for (int j = 0; j < a.length; j++) {
			if(a[j] != -1) {
				//找到了猴王
				System.out.println(j+1);
				break;
			}
		}
	}

结果
11
7

你可能感兴趣的:(蓝桥杯,蓝桥杯,java,猴子选大王)