public class Test {
public static void main(String[] args) {
int n = 7; // 总人数
int k = 3; // 报数到3的人退出
int lastPerson = findLastPerson(n, k);
System.out.println("最后留下的是原来第 " + lastPerson + " 号的人。");
}
public static int findLastPerson(int n, int k) {
// 注意:有 n 个人序号从 0 到 n-1,但题目中人数是从 1 到 n,最终需要返回加1
return (josephus(n, k) + 1);
}
// 递归实现约瑟夫问题
private static int josephus(int n, int k) {
if (n == 1) {
return 0; // 只有一个人时,返回 0
}
// 递归计算,返回的是 0 到 n-1 的索引
return (josephus(n - 1, k) + k) % n;
}
}
效果展示: