帮我写一段JAVA代码,用循环队列求解约瑟夫问题:设有n个人站成一圈,其编号为从1到n。从编号为1的人开始按顺时针方向1、2、3...循环报数,数到m的人出列,然后从出列者的下一个人重新开始报数,数到m的人又出列,如此重复进行,直到n个人都出列为止。要求输出这n个人的出列顺序,并用相关数据进行测试。并要满足下列要求:采用Queue<Integer>作为循环队列qu,先将1-n进队。循环n次共出列n个人,每次从队头开始数m-1个人(出队m-1个人并将它们进队到队尾),再出列第m个人。对应的程序设计如下:Class Joseph{.........}设计测试类Public class Exp2{.......}
时间: 2023-06-19 18:04:09 浏览: 102
Josephus.java,是java课程的实验2 求解约瑟夫环问题.zip
好的,以下是你需要的JAVA代码:
```java
import java.util.Queue;
import java.util.LinkedList;
public class Joseph {
public static void main(String[] args) {
int n = 10; // 人数
int m = 3; // 报数到m的人出列
Queue<Integer> qu = new LinkedList<Integer>();
for (int i = 1; i <= n; i++) {
qu.offer(i); // 1-n进队
}
for (int i = 0; i < n; i++) {
for (int j = 1; j < m; j++) {
qu.offer(qu.poll()); // 出队m-1个人并将它们进队到队尾
}
System.out.print(qu.poll() + " "); // 出列第m个人
}
}
}
```
代码中使用了 Java 自带的 `Queue` 接口和 `LinkedList` 类作为循环队列 `qu` 的实现,通过 `offer()` 和 `poll()` 方法实现入队和出队操作。代码中的注释也详细地说明了每个步骤的具体操作。可以根据需要修改 `n` 和 `m` 的值进行测试。
阅读全文