void main(void)
{
int result(int *p,int n,int m);
int i=0,m=0,n=0;
int num[50];
int *p;
for(;;)
{
printf("输入人数和报数值:");
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
num[i] = i + 1;
p = num;
cout<<"The last one is NO."<<result(p,n,m)<<endl;
}
}
int result(int *p,int n,int m)
{
int i=0;
for(i=0;i<n;i++)
p[i]=i+1;
i=0;
// i为每次循环时计数变量
int k=0;
// k为按1,2,3...m报数时的计数变量
int die=0;
// die为退出人数
while (die<n-1)
// 当退出人数比n-1少时(即未退出人数大于1时)执行循环体
{
if (p[i]!=0)
k++; //如果编号为0,就不报数;如果编号不为0,报数加1
if (k==m)
// 将退出的人的编号置为0
{
printf("%d退出\n",p[i]);
p[i]=0;
k=0;//重新开始报数
m++;//退出人数加1
}
i++;
if (i==n) i=0;
// 报数到尾后,i恢复为0
}
while(*p==0) p++;
return *p;
}