约瑟夫环问题 与实际结果多1 程序错误 帮忙看看

来源:百度知道 编辑:UC知道 时间:2024/04/28 01:04:57
main()
{int i,k,m,n,num[50],*p;
printf("input people number 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)
{k=0;
while(k!=3)
{
if(i==(n-1)) i=0;
else i++;
if(*(p+i)!=0) k++;
}
printf("%d ",*(p+i));
*(p+i)=0;
m++;
}
while(*p==0) p++;
printf("\n%d\n",*p);

}

i=0;k=0;m=0;
==>>
i=n-1;k=0;m=0;

while(m<n-1)
{k=0;
while(k!=3) //k=1->3,移了3个,初始化时,i指向的是第1个,后移2个就弹出,以后每一次弹出后,i指向的是当前被弹出的,也就是往后移3次,因为二者差异,所以在前面i往前移一个,构造所有的条件统一!
{
if(i==(n-1)) i=0;
else i++;
if(*(p+i)!=0) k++;
}
...

越来越觉得自已说得很含糊....

约瑟夫环不是要两个参数么?(总人数和报数值)
题目都没写清楚,又没有一句注释,这种问题怎么找错啊。