问题描述
耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3…。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒请使用双向链表实现编写该程序,依次输出出局人的编号。
输入格式
无
输出格式
输出13行,前12行分别是按顺序出局的人的编号。第13行输出叛徒的编号。
我的思路:针对该题,每次选出出局的人的排序如图,最后剩下两人,手动输出~
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
int n = 13; //总人数
int m = 3; //每逢3出局一个人
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
while (list.size() > m - 1) {
for (int i = 1; i <= list.size(); i++) {
if (i == m) {
System.out.println(list.get(i - 1));
list.remove(i - 1);
for (int j = 0; j < m - 1; ++j) {
list.add(list.get(0));
list.remove(0);
}
// for (int a : list) {
// System.out.print(a + " ");
// }
// System.out.println();
break;
}
}
}
System.out.println(list.get(0));
System.out.println(list.get(1));
}
}