java实现约瑟夫问题(附完整源码)
时间: 2023-11-11 13:03:25 浏览: 96
下面是一个简单的Java实现约瑟夫问题的示例代码:
```java
import java.util.ArrayList;
import java.util.List;
public class JosephusProblem {
public static void main(String[] args) {
int n = 10; // 总人数
int k = 3; // 报数为3的人出列
int m = 0; // 最后剩下的人的索引,初始值为0
// 初始化人数
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
// 开始进行游戏
while (list.size() > 1) {
for (int i = 1; i <= k; i++) {
m = (m + 1) % list.size();
}
System.out.println("出列的人是:" + list.remove(m));
}
// 输出最后剩下的人
System.out.println("最后剩下的人是:" + list.get(0));
}
}
```
在这个例子中,我们使用了一个 List 来存储参与游戏的人的编号。然后,我们按照约瑟夫问题的规则,从列表中不断地移除一个人,直到只剩下一个人为止。具体而言,我们使用了一个 while 循环,在每次循环中,我们先找到报数为 k 的人(即列表中的第 m 个人),然后将其从列表中移除。在移除之前,我们通过不断更新 m 的值来实现循环报数的效果。最后,我们输出剩下的最后一个人的编号。
阅读全文