题目描述
𝑛 个人围成一圈,从第一个人开始报数,数到 𝑚 的人出列,再由下一个人重新从 1 开始报数,数到 𝑚 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰 𝑛−1 名小朋友,而该题是全部出圈。
输入格式
输入两个整数 𝑛,𝑚。
输出格式
输出一行 𝑛 个整数,按顺序输出每个出圈人的编号。
代码:
package lanqiao;
import java.util.*;
public class Main {
static Queue<Integer> queue = new LinkedList<Integer>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int d = 0,e = 1,f = 0;
for(int i = 1;i <= n;i ++)
{
queue.offer(i); //从尾部插入
}
while(!queue.isEmpty())
{
if(e == m)
{
System.out.print(queue.poll() + " "); //输出并删除头元素
e = 1;
}else if(e != m)
{
e ++;
queue.offer(queue.poll()); //将头元素插入到队尾并删除
}
}
}
}