資源限制
時間限制: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);
}
}
}
}