n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 11 开始报数,数到 mm 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
queue<int> q;
cin>>n>>m;
for(int i=1;i<=n;i++)
q.push(i);
int cnt=1;
while(!q.empty()){
if(cnt==m){
printf("%d ",q.front());
q.pop();
cnt=1;
}else{
cnt++;
q.push(q.front());
q.pop();
}
}
return 0;
}
本题可将环形看作一个队列,若队首的报数为m,则将其输出并剔除;否则将队首移至队尾即可。