P1996 约瑟夫问题

· · 题解

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;
}