P1996 约瑟夫问题

P1996 约瑟夫问题

原题链接:https://www.luogu.com.cn/problem/P1996


题目描述

n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。

输入格式

输入两个整数 n,m。

输出格式

输出一行 n 个整数,按顺序输出每个出圈人的编号。

输入输出样例

输入 #1

10 3

输出 #1

3 6 9 2 7 1 8 5 10 4

说明/提示

1≤m,n≤100

C++代码

#include <iostream>
#include <queue>
using namespace std;

int main() {
    int n,m,i,j,t;
    queue<int> q;
    cin>>n>>m;
    int ans[n];
    for(i=1;i<=n;++i)
        q.push(i);
    i=j=0;
    while(!q.empty()) {
        i=(i+1)%m;
        t=q.front(),q.pop();
        if(i==0)
            ans[j++]=t;
        else
            q.push(t);
    }
    for(i=0;i<j;++i)
        cout<<ans[i]<<' ';
    cout<<endl;
    return 0;
}
posted @ 2020-06-30 09:05  yuzec  阅读(104)  评论(0编辑  收藏  举报