请高手帮我看下这段C语言代码!

来源:百度知道 编辑:UC知道 时间:2024/06/14 00:45:01
这是我从书上抄下来的,13个人围一圈,1,2,3报数。 数到3的人退出。

#include<stdio.h>
#define N 13

struct person{
int number;
int next;
}link[N+1];

void main(){
int i,count,h;
for(i=1;i<=N;i++){
link[i].number = i;
if(i==N)
link[i].next = 1;
else
link[i].next = i+1;
}
printf("\n");
count = 0;
h = N; //为什么?
printf("sequence that persons leave the circle:\n");
/*这两个while嵌套的意思我有点模糊不清*/
while(count<N-1){
i=0;
while(i!=3){
h = link[h].next;
if(link[h].number)
i++;
}

printf("%4d",link[h].number);
link[h].number = 0;
count++;

}

printf("\nThe last one is");
for(i=1;i<=N;i++)
if(link[i].number) printf("%3d",link[i].number);

}

200分给我,hi我,我帮你分析
#include<stdio.h>
#define N 13

struct person{
int number;
int next;
}link[N+1];
//定义一个person结构,结构有两个属性,一个记录number,人代表的数字,一个代表next,代表他的下一个和link[14]的数组
void main(){
int i,count,h;
for(i=1;i<=N;i++){
link[i].number = i;
if(i==N)
link[i].next = 1;
else
link[i].next = i+1;
}//初始化,13人围成一个圈
printf("\n");
count = 0;
h = N; //初始化h为N,h在下面有用,要拿来记录的
printf("sequence that persons leave the circle:\n");
/*这两个while嵌套的意思我有点模糊不清*/
while(count<N-1){
i=0;
while(i!=3){
h = link[h].next;//h用来临时记录下一个,(第一循环开始的时候h=13,,h=link[h].next=1即第一个人开始报数1,不是3下一个人开始报数,h= link[h].next=2,不是3继续报数,下一个3,这个是3了那就结束第一次循环,并且把3的标记设为0(link[h].number = 0),即排除出圈外 ,count为1,等下一次外循环开始的时候h=link[h].next=4..........)
if(link[h].number)//如果number为0说明这个人已经被排除在外了,不加如数数
i++;//如果这个人还在的话i+1,继续数
}//如果i=3跳出循