注意while 这个地方,如果直接用if要多循环好多次,但是用while直到不为0省去好多功夫
#include<stdio.h>
struct person{
int num;
int next;
};
int main(){
int n,m=0,i,k=0;
scanf("%d",&n);
struct person a[n];
for(i=0;i<n;i++){
a[i].num=i+1;
a[i].next=i+1;
}
a[n-1].next=0;
i=0;
while(m<n){
if(k!=3){
while(a[i].num==0) i=a[i].next;
k++;
}
if(k==3){
printf("%d ",a[i].num);
a[i].num=0;
a[i-1].next=a[i].next;
m++;
k=0;
}
i=a[i].next;
}
}
如果要标明最后一个出来的
while(m<n-1){
if(k!=3){
while(a[i].num==0) i=a[i].next;
k++;
}
if(k==3){
printf("%d ",a[i].num);
a[i].num=0;
a[i-1].next=a[i].next;
m++;
k=0;
}
i=a[i].next;
}
while(a[i].num==0) i=a[i].next;
printf("\n");
printf("The last person is %d\n",a[i].num);