用java解决约瑟夫问题
时间: 2024-03-09 07:22:09 浏览: 20
好的,约瑟夫问题是指有n个人围成一圈,从第k个人开始报数,报到m的人出圈,然后从下一个人开始重新报数,直到所有人都出圈。现在我们来用Java实现这个问题的解法。
```java
import java.util.ArrayList;
public class JosephusProblem {
public static void main(String[] args) {
int n = 10; // n个人
int k = 3; // 从第k个人开始报数
int m = 4; // 报到m的人出圈
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
int index = k - 1;
while (list.size() > 0) {
index = (index + m - 1) % list.size();
System.out.print(list.remove(index) + " ");
}
}
}
```
在这个程序中,我们使用ArrayList来模拟圆圈,首先我们将所有人编号加入到ArrayList中。然后我们定义一个变量index表示当前报数的人在ArrayList中的下标,初始化为k-1。然后我们循环进行报数和出圈操作,直到ArrayList中没有人。在每一轮循环中,我们计算出下一个出圈的人的下标index,然后将该人从ArrayList中移除,并输出该人的编号。最后我们得到的输出就是最终所有出圈的人的编号的顺序。