n个人围成一圈,从第一个人开始报数。数到 m的人出列,再由下一个人重新从1开始报数。数到 m的人再出圈依次类推,直到所有的人都出圈,请输出依次出圈人的编号。利用队列解决此问题。java
时间: 2024-12-19 16:19:33 浏览: 85
这个问题通常可以用模拟的方式来解决,我们可以创建一个队列来存储剩余的人,然后按照题目描述的过程循环进行。以下是使用 Java 的解决方案:
```java
import java.util.LinkedList;
import java.util.Queue;
public class CircleCount {
public static void main(String[] args) {
int n = 5; // 总人数
int m = 3; // 报到 m 就出列
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < n; i++) {
queue.offer(i + 1); // 初始化队列,每个人编号从 1 开始
}
while (!queue.isEmpty()) {
// 报数并出列
for (int i = 0; i < m && !queue.isEmpty(); i++) {
System.out.println(queue.poll()); // 出队并打印编号
}
if (!queue.isEmpty()) { // 如果还有人没出列
queue.add(queue.poll() - m); // 新一轮开始,将前一位移到最前面,减去m再次入队
}
}
}
}
```
这个程序首先将所有人放入队列,然后在一个循环中,每次循环会先报数 m 次并将相应的人出列。如果队列非空,则更新下一个报数者的位置并继续下一轮。当队列为空时,所有人都已出圈。
阅读全文
相关推荐
















