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