42.退出圈子,下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。输入整数n和m,并按退出顺序输出退出圈子的人的编号。试编写相应程序。
//42.退出圈子,下一个人从1开始报数,报到m的人退出圈子,如此下去,直到留下最后一个人
//输入整数n和m,并按退出顺序输出退出圈子的人的编号
#include <stdio.h>
#include <stdlib.h>
void main()
{
int m,n,i,cnt=0,CNT=0,flag;
printf("please input the m and n:\n");
scanf("%d%d",&m,&n);
int *a=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
a[i]=i+1;
while(1)
{
flag=CNT;
for(i=0;i<n;i++)
{
if(a[i]!=0)
{
cnt++;
CNT++;
}
if(cnt==m)
{
a[i]=0;
cnt=0;
printf("%d ",i+1);
}
}
if(CNT==flag+1)
break;
}
free(a);
}
运行结果: