各位大哥帮我解释一个程序!
10.5有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
#define N 5
main()
{int i,j,k,a[N+1],*p;
for(i=0,p=a;p<=a+N;i++,p++)
*p=i;
p=a+1;k=N;
for(i=0,j=1;k!=1;j++)
{if(p>(a+N))
p=a+1;
if(*p!=0)
i++;
if((i-3)==0)
{*p=0;i=0;k--;}
p++;
}
for(i=1;i<=N;i++)
if(a[i]!=0)
printf("The last number is %d\n",a[i]);}
请各位大哥帮我详细解释每一步的思路。