数据结构-约瑟夫问题课后作业
1 /* 2 课后作业:编号为1~N的N个人按顺时针方向围坐一圈,没人持有一个密码(正整数,可以自由输入),开始人 3 选一个正整数作为报数上限值M,从第一个人安顺十中方向自1开始顺序报数,报到M时停止报数。报M的人出列 4 ,将他的密码作为新的M值,从他顺时钟方向上的下一个人开始从1报数,如此下去,直至所有人全部出列为止 5 */ 6 #include"stdio.h" 7 #include"stdlib.h" 8 #define N 10 9 typedef struct node{ 10 int num; 11 int password; 12 struct node* next; 13 }LinkNode; 14 LinkNode* creatList(int n) 15 { 16 LinkNode *head = (LinkNode*)malloc(sizeof(LinkNode)); 17 LinkNode *p = head; 18 LinkNode *s; 19 int i = 1; 20 if(n!=0) 21 { 22 while(i <= n) 23 { 24 s = (LinkNode*)malloc(sizeof(LinkNode)); 25 printf("请输入第%d个人的密码",i); 26 s->num = i++; 27 scanf("%d",&s->password); 28 p->next = s; 29 p = s; 30 } 31 s->next = head->next; 32 } 33 free(head); 34 return s->next; 35 } 36 37 main() 38 { 39 int count = 0; 40 int m; 41 LinkNode *p,*q; 42 q = p = creatList(N); 43 printf("请输入第一个上限值M"); 44 scanf("%d",&m); 45 while(p->next!=p) 46 { 47 count++; 48 if(count == m) 49 { 50 printf("%d死了\n",p->num); 51 m = p->password; 52 count =0; 53 q->next = p->next; 54 } 55 q = p; 56 p = p->next; 57 } 58 printf("%d死了\n",p->num); 59 60 }