1 #include <stdio.h> 2 #include <stdlib.h> 3 struct node 4 { 5 int data; 6 struct node*next; 7 }; 8 int main() 9 { 10 int m,n,x,i,j; 11 while(~ scanf("%d",&n)&&n!=0) 12 { 13 struct node*head,*p,*end; 14 head=(struct node*)malloc(sizeof(struct node)); 15 head->next=NULL; 16 end=head; 17 head->data=1;//因为每次都是一个新的循环,所以都要重置,否则第二次循环会出错误。 18 for(i=0; i<n-1; i++) 19 { 20 p=(struct node*)malloc(sizeof(struct node)); 21 p->data=i+2; 22 p->next=head;//环状问题,让p的下一个等于head。 23 end->next=p; 24 end=p; 25 } 26 for(j=1; j<n; j++) 27 { 28 if(j==n-1)printf("%d ",n);//如果只剩排长了,那么直接输出。 29 p=end->next; 30 for(i=1; i<=4; i++) 31 { 32 p=p->next; 33 end=end->next;//循环次数要比m小一个,以便于下面进行删除操作。 34 } 35 if(p->data==1) 36 { 37 printf("%d ",j); 38 break; 39 } 40 end->next=p->next;//和约瑟夫一样的删除操作。 41 } 42 } 43 return 0; 44 }