数据结构-约瑟夫问题课后作业

 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 }

猜你喜欢

转载自www.cnblogs.com/sucker/p/10854333.html