【例2-3】围圈报数

【例2-3】围圈报数

链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1334
时间限制: 1000 ms         内存限制: 65536 KB
 

【题目描述】

有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出列的顺序。

【输入】

n和m。

【输出】

出列的顺序。

【输入样例】

4 17

【输出样例】

1 3 4 2
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
int flag;
int a[1000005];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++)a[i]=i+1;
    a[n]=1;
    int j=0,t=0;
    while((++j)<=n)
    {
        int k=0;
        while((++k)<m)t=a[t];
        if(flag)printf(" %d",a[t]);
        else {flag=1;printf("%d",a[t]);
        }
        a[t]=a[a[t]]; 
    }
    return 0;
}
原文地址:https://www.cnblogs.com/EdSheeran/p/8017875.html