介绍:
约瑟夫环(Josephus problem)是一个经典的数学问题,从某个人开始,每次数到指定的数字就将该人移除,最后确定最后剩下的那个人的初始位置。
代码实现:
public class JosephusProblem {
public static int findLastPerson(int n, int k) {
// 创建一个列表,存储所有的人
List<Integer> people = new ArrayList<>();
for (int i = 1; i <= n; i++) {
people.add(i);
}
int index = 0; // 当前报数的人的索引
while (people.size() > 1) {
index = (index + k - 1) % people.size(); // 计算下一个被移除的人的索引
people.remove(index); // 移除被数到的人
}
return people.get(0); // 返回最后剩下的人的编号
}
public static void main(String[] args) {
int n = 20; // 总人数
int k = 3; // 每次数到3的人将被移除
int lastPerson = findLastPerson(n, k);
System.out.println("最后剩下的人的编号为: " + lastPerson);
}
结论:
输入:20 输出20 ,输入10,输出4