有n個小朋友做遊戲,他們的編號分別是1,2,3,4…n。他們按照編號從小到大依次順時針圍成一個圓圈,第一個小朋友開始報數,依次按照順時針方向報數(報數的值加一),每個報m的人會離開隊伍,然後下一個小朋友會繼續從1開始報,直到剩下一個小朋友爲止。輸出最後小朋友的編號.
#include<iostream>
#include<queue>
#include<string>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
queue<int> q;
for(int i=1;i<=n;i++){//將小朋友排的隊依次壓入隊列
q.push(i);
}
int cur=1;//記錄當前報的數
while(q.size()>1){//保證剩一個小朋友
int x=q.front();
q.pop();
if(cur==m){//如果當前小朋友報的是m就離開隊列
cur=1;//下一個小朋友從1開始報
}else{
q.push(x);//如果當前小朋友報的不是m,就繼續到隊尾排隊
cur++;//報的數加一
}
}
cout<<q.front()<<endl;//最後剩下的小朋友就是答案
return 0;
}