用java实现约瑟夫(Joseph)环输出形式:建立一个输出函数,将正确的出列顺序输出
时间: 2024-02-27 17:51:30 浏览: 62
好的,我可以帮你回答这个问题。
约瑟夫环是一个经典的数学问题,它的规则如下:n个人(编号为1~n)围成一圈,从第1个人开始报数,报到m的人出圈,然后从出圈的下一个人开始重新报数,直到所有人都出圈为止。通常我们把每次出圈的人的编号按顺序输出,就是输出约瑟夫环的解。
以下是一个用Java实现的约瑟夫环输出函数:
```java
public static void josephRing(int n, int m) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
int index = 0;
while (list.size() > 0) {
index = (index + m - 1) % list.size();
System.out.print(list.get(index) + " ");
list.remove(index);
}
}
```
这个函数有两个参数:n表示总人数,m表示每次报数的数字。它首先创建一个List来保存所有的人的编号,然后使用一个循环来进行出圈操作,直到所有人都出圈为止。在每次出圈时,它会计算出下一个要出圈的人的编号,然后将这个人的编号输出并从List中删除。
你可以调用这个函数来输出约瑟夫环的解,例如:
```java
josephRing(7, 3); // 输出 3 6 2 7 5 1 4
```
注意,这个函数输出的是每次出圈的人的编号,而不是按照出圈的顺序输出。如果你需要按照出圈的顺序输出,可以使用一个新的List来保存每次出圈的人的编号,最后再按照顺序输出即可。
阅读全文