[求助]奇怪的循环
题目:这是个关于约瑟夫的问题(当n<=3时无问题,但当n>3是却是死循环,我不知道为什么,请大家帮忙解释一下),代码如下:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{int n,m,i;
int *p,*q;
printf("please input the quantity of elements:");
scanf("%d",&n); //n为你所键入的数的个数
printf("\n");
p=(int *)malloc(sizeof(int)*(n+1)); //分配空间
for(i=0;i<n;i++)
*(p+i)=i+1;
q=p;
i=0;
m=n;
while(n!=1) //问题循环
{
if(q>p+n-1) q=p;
if(*q!=0) i++;
if((i-3)==0) {*q=0;i=0;n--;}
q++;
};
printf("print key is:");
for(i=0;i<m;i++) //输出最后的值
{ if(p[i]==0) continue;
printf("%d\n",p[i]);
}
free(p);
return 0;
}