小題~

 /*
有17人圍成一圈(編號0-16),從第0號的人開始從1報數,
凡是報到3的倍數的人就主動離開圈子,
然後再數下去(不累計計數,從1計數,直到出圈,重新開始),
直到最後一個人爲止,請問最後留下來的人的原來位置是多少號?
*/
public class OneArray{
	public static void main(String[] args) {
		int[] person = getLocation();
		System.out.println("最後的結果如下:(其中,0表示已經離開圈子了,1表示還在圈中)");
		for (int i = 0; i < person.length; i++) {
			System.out.print(person[i] + " ");
			// 尋找哪個人的狀態爲1,則此人就是一直沒有出圈的人,獲取此元素的下標,就是此人原來位置的編號
			if (person[i] == 1) {
				System.out.println("這個人的原來位置編號爲:" + i);
			}
		}
	}
	public static int[] getLocation() {
		int person[] = new int[17];				// 創建一個由17個人組成的圈子
		for (int i = 0; i < person.length; i++) {		
			// 設置每個人都在圈內的狀態爲1
			person[i] = 1;
		}
		int i = 0;							// 表示第幾個人
		int k = 0;							// 表示報數
		int count = 0;						// 表示出圈的人數
		while (true) {
			i = i % 17;						// 爲了確保i的值永遠在0~16之間
			if (person[i] == 1) {				// 如果此人還在圈中則報數
				k++;						// 報數加1
				if (k % 3 == 0) {				// 如果報的數是3的倍數
					person[i] = 0;			// 此人的狀態改爲0,表示此人已經離圈
					count++;				// 離圈的人自動加1
				}
			}
			if (count == 16) {				// 如果已經有16個人離圈,則結束報數
				break;
			}
			i++;
		}
		return person;
	}
}




 

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