【题目描述】
有 m 个人,其编号分别为 1~m。按顺序围成一个圈,现在给定一个数 n,从第一个人开始依次报数,报到 n 的人出圈,然后再从下一个人开始,继续从 1 开始依次报数,报到 n 的人再出圈,……如此循环,直到最后一个人出圈为止。编程输出所有人出圈的顺序。
【输入】
一行两个正整数 m 和 n,之间用一个空格隔开,1≤m<100,1≤n≤32767。
【输出】
输出 m 行,每行一个正整数,表示依次出圈的人的编号。
【输入样例】
8 5
【输出样例】
5
2
8
7
1
4
6
3
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,t,l,a[105];
int main()
{
scanf("%d %d",&n,&m);
int t=n,l=1;
while(t){
int s=0;
for(int i=l;s!=m;i++)
{
if(i>n)
i%=n;
if(a[i]==-1)
continue;
s++;
if(s==m)
{
a[i]=-1;
t--;
l=i+1;
printf("%d\n",i);
break;
}
}
}
return 0;
}