【王道JAVA】【程序 37 报数】

题目:有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位。

import java.util.Scanner;

public class WangDao {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.print("Input the n: ");
		int n = scan.nextInt();
		boolean[] isIn = new boolean[n];	// 用布尔型数组来标记是否在圈内。
		for (int i = 0; i < isIn.length; i++) {
			isIn[i] = true;
		}
		int inCircle = n, index = 0, number = 0;	// 圈内人数,指标,报数。
		while (inCircle > 1) {	// 圈内人数剩下1人时退出。
			if (isIn[index]) {
				number++;
				if (number == 3) {	// 报数到3时。
					number = 0;	// 重新报数。
					isIn[index] = false;	// 标记退圈。
					inCircle--;	// 圈内人数扣1个。
				}
			}
			index++;	// 指标每轮加1. 不可写成isIn[index++],因为if内也要用到index,不能提前更变。
			if (index == n) {	// 如果数到最后一号,重头再遍历。
				index = 0;
			}
		}
		for (int i = 0; i < isIn.length; i++) {
			if (isIn[i]) {	// 遍历到未标记退圈的号数加1,就是活着的人。
				System.out.println("Last one is " + (i + 1));
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/YelloJesse/article/details/89431309
37