传说约瑟夫当年活下来就是靠快速计算这个问题。
nn 个人围成一圈,编号依次为 1,2,3…n。从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈。以此类推,直到所有的人都出列。请输出依次出圈人的编号。
输入格式
两个整数 n,m 1≤n,m≤100。
输出格式
n 个用空格分隔的整数,表示出圈人的编号。
输入样例
6 4
输出样例
4 2 1 3 6 5、
思路:通过while语句循环,再用内循环for语句,进行报数,条件语句满足时输出,然后归0重新报数,直到全部报完
代码
#include<stdio.h>
int main()
{
int m ,n;
scanf("%d %d",&n,&m);
int a[n];
int x=n;
int i;
int j=0;
for(i=0;i<n;i++)
{
a[i]=i+1;
}
while(x>1) {
for(i=0;i<n;i++)
{
if(a[i]!=0)
{
j++;
}
if(j==m)
{
printf("%d ",a[i]);
a[i]=0;
j=0;
x--;
}
}
}
for(i=0;i<n;i++)
{
if(a[i]!=0)
printf("%d",a[i]);
}
return 0;
}