java实现约瑟夫环(附完整源码)
时间: 2023-07-31 12:06:21 浏览: 76
java 实现约瑟夫环
约瑟夫环是一个经典的问题,描述如下:有 n 个人围成一圈,从第 k 个人开始报数,报到 m 的人出圈,然后从下一个人开始重新报数,直到所有人都出圈为止。下面是 Java 实现约瑟夫环的完整源码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入总人数:");
int n = scanner.nextInt();
System.out.print("请输入起始位置:");
int k = scanner.nextInt();
System.out.print("请输入出圈数字:");
int m = scanner.nextInt();
// 初始化人员列表
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
// 开始报数并出圈
int index = k - 1;
System.out.print("出圈顺序:");
while (list.size() > 0) {
index = (index + m - 1) % list.size();
System.out.print(list.remove(index) + " ");
}
}
}
```
在上面的代码中,我们首先使用 Scanner 类从控制台读取总人数、起始位置和出圈数字。然后,使用 ArrayList 类初始化人员列表,将所有人的编号加入到列表中。接着,我们使用 index 变量来记录当前起始位置,然后循环报数并出圈。在每次出圈时,我们使用 remove 方法将出圈的人员从列表中删除,并打印出圈顺序。最终,当人员列表为空时,循环结束。
需要注意的是,在约瑟夫环问题中,人员编号从 1 开始,而不是从 0 开始。因此,在代码中我们初始化人员列表时,使用的是从 1 到 n 的循环。
阅读全文