最近在恶补c语言,昨天在做一个“选出猴王”的小练习题,应该也有人遇到过这个题,大概就是好多猴子围成一圈,编成号,从1-N,然后从1号开始报数,顺时针猴子依次报数加1,如果有猴子报的数字是M则出列,下只猴子继续从1号开始报数,依次循环,最后一个出列的就是猴王,本来这道题感觉也不怎么难,想着用一个循环链表就可以搞定,但是在用到结构体的时候就出现问题了,请各位大虾们给小弟指点迷津一下。
代码如下:
#include#include typedef struct List{ int data; struct List *next;}*monkey;int main(void){ struct List *start,*Monkey,*end; int count = 1,NumofMonkey,stride,i; printf("请输入猴子的总数:"); scanf("%d",&NumofMonkey); printf("请输入出局的数字:"); scanf("%d",&stride); start = NULL; for(i=0;i data = i+1; if(start == NULL){ start = end = Monkey; start->next= start; } else{ Monkey->next = end->next ; end->next = Monkey; end = Monkey; } } while(start != NULL){ if(start->next == start){ printf("%4d\n",start->data); free(start); start->next = NULL; break; } if(count == stride-1){ Monkey = start->next; start->next = Monkey->next; printf("%4d",Monkey->data); free(Monkey); Monkey->next = NULL; count = 0; } count++; start = start->next ; } return 0;}