资源限制
时间限制: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);
}
}
}
}