【王道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));
			}
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章