文章目錄
實驗題目(共10題, 第1題)
標題: |
約瑟夫環 |
時 限: |
500 ms |
記憶體限制: |
2000 K |
總時限: |
1000 ms |
描述: |
約瑟夫環編號為1,2,3,……,n的n個人按順時針方向圍坐一圈。任選一個正整數作為報數上限m,從第一個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,從他在順時針方向上的下一個人開始重新從1報數,如此下去,直至所有人全部出列為止。設計程式輸出出列順序。 |
輸入: |
人數n 報數上限m個人記錄1 (格式為:姓名 學號 性別 年齡 班級 健康情況)個人記錄2… 個人記錄n |
輸出: |
第1次報數出列的個人記錄第2次報數出列的個人記錄… 第n次報數出列的個人記錄 |
輸入範例: |
5 3安彌邵 10000001 女 28 計43 一般宰覓 10000002 男 23 計79 健康顧健 10000003 男 27 計29 一般宓頑芳 10000004 女 20 計17 健康能紙壟 10000005 男 18 計11 健康 |
|
輸出範例: |
顧健 10000003 男 27 計29 一般 安彌邵 10000001 女 28 計43 一般 能紙壟 10000005 男 18 計11 健康 宰覓 10000002 男 23 計79 健康 宓頑芳 10000004 女 20 計17 健康 |
提示: |
迴圈表 |
來源: |
View Code
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 struct LNode
6 {
7 int num;
8 char o[20];
9 char y[20];
10 char w[20];
11 char x[20];
12 char e[20];
13 char r[20];
14 LNode *next;
15 };
16
17 typedef LNode *LinkList;
18
19 void CreateCList(LinkList &CList, int N)
20 {
21 int j;
22 LinkList p,q;
23 CList=(LinkList)malloc(sizeof(LNode));
24 p=q=CList;
25 scanf("%s %s %s %s %s %s\n",p->o,p->y,p->w,p->x,p->e,p->r);
26 CList->num=1;
27 for(j=1; j<N; j++)
28 {
29 p=(LinkList)malloc(sizeof(LNode));
30
31 scanf("%s %s %s %s %s %s\n",p->o,p->y,p->w,p->x,p->e,p->r);
32 p->num=j+1;
33 q->next=p;
34 q=p;
35 }
36 p->next=CList;
37 }
38
39 void Run(LinkList CList,int m)
40 {
41 int j;
42 LinkList p,q;
43
44 p=CList;
45 while(p->next!=p)
46 {
47 if(m==1) for(q=p; q->next!=p;q=q->next);
48 for(j=1; j<m; j++)
49 {
50 q=p;
51 p=p->next;
52 }
53 q->next = p->next;
54 printf("%s %s %s %s %s %s\n", p->o,p->y,p->w,p->x,p->e,p->r);
55 free(p);
56 p=q->next;
57 }
58 printf("%s %s %s %s %s %s\n",p->o,p->y,p->w,p->x,p->e,p->r);
59 free(p);
60 }
61
62 int main()
63 {
64 int n,m;
65
66 scanf("%d %d",&n,&m);
67 LinkList CList;
68
69 CreateCList(CList, n);
70
71 Run(CList,m);
72
73 return 0;
74 }