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 }
![]()