1 #include2 #include 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 data=i+2;22 p->next=head;//环状问题,让p的下一个等于head。23 end->next=p;24 end=p;25 }26 for(j=1; j 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\n",j);38 break;39 }40 end->next=p->next;//和约瑟夫一样的删除操作。41 }42 }43 return 0;44 }