N个人围城一圈报数,报到3退出的问题
N个人围城一圈报数,报到3退出的问题 ,如123 则最后剩下2, 第一个代码错误,第二个正确 第一个错在哪呀?#include <stdio.h>
int main()
{int i,k,m,n,num[50],*p;
printf("\ninput number of person: n=");
scanf("%d",&n);
p=num;
for (i=0;i<n;i++) //将输入的人排序
*(p+i)=i+1;
i=0;
k=1; //k记录123报数
m=0; //m 退出的人数
while (m<n-1)
{
if (*(p+i)!=0) //当前数不是0,指向下一个数,且报数加1,是0的话,指向下一个数,但报数不变
{
i++;
k++;
}
else i++;
if (k==3) //报3,指向下一个数,将k恢复成1
{
*(p+i)=0;
k=1;
i++;
m++;
}
if (i==n) i=0;
}
while(*p==0) p++;
printf("The last one is NO.%d\n",*p);
return 0;
}
第二个
#include <stdio.h>
int main()
{int i,k,m,n,num[50],*p;
printf("\ninput number of person: n=");
scanf("%d",&n);
p=num;
for (i=0;i<n;i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while (m<n-1)
{if (*(p+i)!=0) k++;
if (k==3)
{*(p+i)=0;
k=0;
m++;
}
i++;
if (i==n) i=0;
}
while(*p==0) p++;
printf("The last one is NO.%d\n",*p);
return 0;
}