java解决约瑟夫问题
时间: 2023-10-18 12:24:05 浏览: 49
约瑟夫问题是一个经典的数学问题,描述如下:
n个人围成一圈,从第一个人开始报数,每报到m个人就将该人杀死,然后从下一个人重新开始报数,直到杀死所有人。求最后一个被杀死的人的编号。
Java代码如下:
```java
import java.util.ArrayList;
import java.util.List;
public class JosephusProblem {
public static void main(String[] args) {
int n = 10; // 总人数
int m = 3; // 报数到m的人被杀死
List<Integer> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add(i + 1); // 将所有人按顺序加入列表
}
int index = 0; // 记录要被杀死的人的索引
while (list.size() > 1) {
index = (index + m - 1) % list.size(); // 计算要被杀死的人的索引
System.out.println("杀死了第" + list.get(index) + "个人");
list.remove(index); // 将被杀死的人从列表中移除
}
System.out.println("最后一个被杀死的人的编号是:" + list.get(0));
}
}
```
运行结果:
```
杀死了第3个人
杀死了第6个人
杀死了第9个人
杀死了第2个人
杀死了第7个人
杀死了第1个人
杀死了第8个人
杀死了第5个人
最后一个被杀死的人的编号是:4
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)