P1996 约瑟夫问题
crystallee · · 题解
P1996 约瑟夫问题
P1996 约瑟夫问题
//P1996 约瑟夫问题
#include <iostream>
#include <queue>
using namespace std;
queue <int> q;//定义这圈人的队列
int main(){
int n,m;
cin>>n>>m;
for (int i=1;i<=n;i++) q.push(i);//把n个数依次按顺序入队
while (q.size()!=0){//只要队列所剩人数不等于0,所有人还没全部出圈,就继续循环
for (int j=1;j<m;j++){//从1开始报数,报到m-1,报到的人依次排到队尾
q.push(q.front());//把队首报数的人放到队尾
q.pop();//报完数的队首人已经加入队尾了,所以弹出队首
}
cout<<q.front()<<" ";//最后报到m的人出列,输出并弹出去,不需要重新入队
q.pop();
}
return 0;
}