修改了一下,如下:
#include "stdio.h" //头文件貌似不一样,应该是不同编译工具问题吧~
int main()
{
int a[1000];
int *p,i,n,m;
int j=0;
printf("输入人数:\n");
scanf("%d",&n);
p=a;
m=n;
for(i=0;i
i=0;
while(m-2) //这里没问题,问题在下面
{
if(*(p+i)!=0)
{
j++;
if(j==3)
{
j=0;
*(p+i)=0;
m--;
}
}
i++; //原来的代码中,这三句包在了if(*(p+i)!=0)里了,使得循环几次后,卡成死
if(i==n) //循环,要观察详细过程,楼主可以在每次循环都把数组显示出来就知道了
i=0; //这里i++应该放在这个if小判断前,如果放在后面,清零后又加了1,造成
} //最后结果不正确
for(i=0;i
if(*(p+i)!=0)
printf("%d\n",i+1);
}
printf("Hello World!\n");
return 0;
}
如输入6,则输出1 5,应该满足楼主的题意~~
已改,看注释
int main(int argc, char* argv[])
{
int a[1000];
int *p,i,j=0,n,m;
printf("人数\n");
scanf("%d",&n);
p=a;
m=n;
for(i=0;i
i=0;
while(m-2 > 0)
{
if(*(p+i)!=0)//
{
j++;
if(j==3)
{
j=0;
*(p+i)=0;
m--;
}
}
i++; // 这个放if外面
if(i==(n-1))
i=0;
}
for(i=0;i
if(*(p+i)!=0)
printf("%d\n",i+1);
}
printf("Hello World!\n");
return 0;
}
经过测试,发现楼主应该写错了,while(m-2)或许该改为m-i,因为if(j==3)这句可能执行不了,也就没法让m改变,则while永真就陷入死循环。
while循环没有判断条件啊,就一个m-2,那是到什么时候结束