约瑟夫环 (c++)

实验题目(共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 健康
提示:循环表
来源:

《约瑟夫环 (c++)》
《约瑟夫环 (c++)》
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 }
    原文作者:itbird
    原文地址: https://www.cnblogs.com/xiaofengkang/archive/2011/05/24/2055793.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞