N个人围成一圈的一道题(问题更新)
题目如下: 有N个人围成一圈,顺序排号.从第一个人开始报数,从1报到3,凡报到3的人退出圈子,问最后留下的是原来第几号的那位.程序如下:
main()
{
int *p,num[20],i,k,m,n;
p=num;
scanf("%d",&n);
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0; //i为每次循环时的计数变量
m=0; //m为退出人数
k=0; //k为按1,2,3报数时的计数变量
while(m<n-1) //当未退出人数>1时
{
if(*(p+i)!=0)
k++;
if(k==3) //对退出的人的编号置0
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) //报数到最后,i恢复为0
i=0;
}
while(*p==0) //请问这句话是什么意思? *p不是指向num数组的首地址吗,怎么会是0?
p++; //这句话又是什么意思? (我知道最后输出的*p是最后留在圈子里的人,但是用这语句判断我看不懂,望请教)
printf("%d",*p);
}
[此贴子已经被作者于2006-9-18 23:47:34编辑过]