传说约瑟夫当年活下来就是靠快速计算这个问题。
n 个人围成一圈,编号依次为 1,2,3…n。从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m的人再出圈。以此类推,直到所有的人都出列。请输出依次出圈人的编号。
输入格式:
两个整数 n,m,1≤n,m≤100。
输出格式:
n个用空格分隔的整数,表示出圈人的编号。
#include<stdio.h>
#include<math.h>
#include<string.h>
int main ()
{
int a[1000]={0};//定义a
int i=0,j=0,m,n,p=0,cnt=0;
scanf("%d%d",&n,&m);输入数据
for(i=1;p!=n;i++)//利用循环确定输入的个数
{
if(i>n)
i=1;
if(a[i]==0)
{
cnt++;
if(cnt==m)//如果cnt等于m,则输出数据
{
a[i]=1;
p++;
printf("%d ",i);
cnt=0;}
}
}
return 0 ;
}