帮忙解释一程序中的while语句
/* n 个人围成一圈, 并依次编号1~n,。从编号为1 的人开始,按顺时针方向每隔一人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿。如果你想成为最后两个
幸运儿,请问开始时应该站在什么位置?(设3<=n<=50)
输入:开始时的人数n
输出:第1 行是选出顺序,第2 行是两名幸运儿的开始位置(按升序排列),位置编号之间用一个空格
分开。
示例
输入:
12
应该的输出:
2 4 6 8 10 12 3 7 11 5
1 9*/
#include"stdio.h"
#include"string.h"
#include"conio.h"
#define N 30
main()
{
int num[N],i,j,temp,x;
i=temp=0;
printf("input,please!");
scanf("%d",&x);
for(j=0;j<x;j++)
num[j]=1;
while(temp!=2)
{
temp=0;
for(j=0;j<x;j++)
temp+=num[j];
if(temp==2)break;
if(num[i])
{
while(num[++i]!=1&&i<x);
if(i==x)
{
i=-1;while(num[++i]!=1);
}
num[i]=0;
}
i++; if(i==x)i=0;
}
for(i=0;i<x;i++)
if(num[i]==0)printf("%d ",i+1);
printf("\n");
for(i=0;i<x;i++)
if(num[i])
printf("%d ",i+1);
getch();
}