类似约瑟夫的问题。请纠正一下程序
N(N>M)个人(每个人有一个编号,按顺序取1到N之前的一个自然数)围成一圈,从第一个开始顺序报名1、2、3、、、M;然后留在圈子里的从下一个人开始继续顺序报名1、2、3、、、M;报到M者退出圈子,如此继续直到圈子里的人小于M个并输出他们的编号。# define N 17
# include <stdio.h>
main()
{int t1,t2,i,j,n=N,m,a[N],b[N];
printf("imput the number:\n");
scanf("%d",&m);
for(i=1;i<=n;i++)
a[i]=i;
do{t1=n/m;t2=n%m;j=t2;
for(i=1;i<=n;i++)
if(i/m)b[++j]=a[i];//为重排数组做准备//
for(i=1;i<=t2;i++)
b[i]=b[j-t2+i];//将余数排在前面重新排列数组//
n=n-t1;//排列后的n值//
for(i=1;i<=n;i++)
a[i]=b[i];//为第一个循环做准备//
}while(n>=m);
for(i=1;i<=n;i++)
printf("the number of the last is:%5d",a[i]);
printf("\n");
return 0;
}
我输入m等于5,程序运行结不对啊