藍橋試題 算法提高 找出出賣耶穌的人 JAVA

資源限制
時間限制:1.0s 內存限制:256.0MB
問題描述
  耶穌有13個門徒,其中有一個就是出賣耶穌的叛徒,請用排除法找出這位叛徒:13人圍坐一圈,從第一個開始報號:1,2,3,1,2,3…。凡是報到“3”就退出圈子,最後留在圈子內的人就是出賣耶穌的叛徒請使用雙向鏈表實現編寫該程序,依次輸出出局人的編號。
輸入格式
  無
輸出格式
  輸出13行,前12行分別是按順序出局的人的編號。第13行輸出叛徒的編號。
  
思路:給約瑟夫環十分相似。


public class Main{
	public static void main(String[] args) {
		int[] arr = new int[13];               // 13個人
		for (int i = 0; i < arr.length; i++) {
			arr[i] = i + 1;                    // 邊界+1
		}
		int ans = 0;                           // 總人數
		int sum = 0;                           // 符合數
		int p = 13;                            // 13位耶穌
		while (p > 1) {                        // 大於1,進入循環
			if (arr[ans] != 0) {               // 數組內總人數!=0
				sum++;                         // 符合數++
			}
			if (sum == 3) {                    // 是圈
				sum = 0;                       // 清零
				p--;                           // 耶穌--
				System.out.println(arr[ans]);  // 輸出
				arr[ans] = 0;                  // 重新定義,進入下一次循環
			}
			ans++;                             // 總人數++
			if (ans == 13) {                   // 總人數=13位耶穌時
				ans = 0;                       // 清零
			}
		}
		for (int i : arr) {                    // 遍歷輸出剩下的數字
			if (i != 0) {
				System.out.println(i);
			}
		}
	}
}

小劇場:不回頭不轉彎。Don’t turn around.

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