java队列解决约瑟夫问题
时间: 2023-06-12 16:04:53 浏览: 104
约瑟夫问题是一个经典的问题,它的描述如下:n个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,再次报到m的人出圈,直到所有人出圈为止,求出出圈的顺序。
可以使用Java中的Queue来解决该问题,具体实现如下:
```java
import java.util.LinkedList;
import java.util.Queue;
public class JosephusProblem {
public static void main(String[] args) {
int n = 7; // 总人数
int m = 3; // 报数为3的人出圈
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i <= n; i++) {
queue.offer(i);
}
int count = 0;
while (!queue.isEmpty()) {
int num = queue.poll(); // 取出队首元素
count++;
if (count == m) {
System.out.print(num + " ");
count = 0;
} else {
queue.offer(num); // 不是出圈的人重新加入队列
}
}
}
}
```
上述代码中,使用了Java中的LinkedList作为Queue的实现类,通过offer()方法向队列中添加元素,使用poll()方法取出队首元素,使用isEmpty()方法判断队列是否为空。通过不断循环从队列中取出元素,判断是否是出圈的人,如果是则输出,如果不是则重新加入队列。最终输出的就是出圈的顺序。
阅读全文