约瑟夫问题 (Standard IO)
时间限制: 1000 ms 空间限制: 262144 KB
具体限制Goto ProblemSet
题目描述有 m 个人,其编号分别为 1~m。按顺序围成一个圈,现在给定一个数 n,从第一个人开始依次报数,报到 n 的人出圈,然后再从下一个人开始,继续从 1 开始依次报数,报到 n 的人再出圈,……如此循环,直到最后一个人出圈为止。编程输出所有人出圈的顺序。输入一行两个正整数 m 和 n,之间用一个空格隔开,1≤m<100,1≤n≤32767。输出输出 m 行,每行一个正整数,表示依次出圈的人的编号。
样例输入8 5
样例输出52871463
#include<cstdio>
int m,n,cnt=1;
int a[500];
int main()
{
scanf("%d %d",&m,&n);
int num=m;
while(num>=1)
{
for(int i=1;i<=m;i++)
{
if(a[i]==-1)
{
continue;
}
a[i]=cnt;
if(cnt==n)
{
printf("%d\n",i);
num--;
a[i]=-1;
cnt=0;
}
cnt++;
}
}
}