• 约瑟夫问题 1128


    题目描述:

    已知n个人(编号分别为1、2、3,……、n)围坐在一张圆桌周围,从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列,依次规律重复下去,直到圆桌周围的人全部出列

    输入描述:

    一行:人数n和间隔数m

    输出描述:

    出列顺序,每个编号之间用一个空格分开

    样例输入:

    9 5

    样例输出:

    5 1 7 4 3 6 9 2 8

    自己做过类似的课程设计

      

      1 //4、约瑟夫环 
      2 //问题描述:
      3 //编号为1,2… n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
      4 //一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,
      5 //报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报数,
      6 //如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。 
      7 //基本要求:
      8 //(1)利用单循环链表作为存储结构模拟此过程;
      9 //(2)键盘输入总人数、初始报数上限值m及各人密码;
     10 //(3)按照出列顺序输出各人的编号
     11  
     12 #include<stdio.h>
     13 #include<stdlib.h>
     14 #define N 100
     15 typedef struct LNode
     16 {
     17     int data;
     18     struct LNode *next;
     19 
     20 }LNode,*LinkList;
     21 
     22 LinkList CreateNode(int n)
     23 {
     24     LinkList LNode;
     25     LNode=(LinkList)malloc(sizeof(LNode));
     26     LNode->data=n;
     27     LNode->next=NULL;
     28     return LNode;
     29 }
     30 
     31 void CreateList(LinkList &pH, int n)
     32 {
     33     int k;
     34     LinkList p, t;
     35     p=CreateNode(1);
     36     t=p; 
     37     pH=p; 
     38     t->next=pH; 
     39     for(k=2;k<=n;k++)
     40     {    
     41         p=CreateNode(k);
     42         p->next=t->next;
     43         t->next=p;
     44         t=p;
     45     }
     46 }
     47 
     48 void PrintList(LinkList pH, int Ld,int Lcode[])
     49 {
     50     LinkList p, temp,c;
     51     p=pH;
     52     int i,count=1;
     53     while(p->next!=p)
     54     {
     55         for(i=1;i<Ld;i++)
     56         {
     57             temp=p;
     58             p=p->next;
     59         }
     60         temp->next=p->next;
     61         Ld=Lcode[p->data];
     62         c=p;
     63         printf("第%d个出列的小孩的编号为:%d
    ",count,p->data);
     64         free(c);
     65         count++;
     66         p=temp->next;
     67         
     68     }
     69     printf("第%d个出列的小孩的编号为:%d
    ",count,p->data);
     70     free(p);
     71     pH=NULL;
     72 }
     73 
     74 int main()
     75 {
     76     int n,m,i;
     77     int code[N];
     78     LinkList h=NULL;
     79     printf("请输入小孩的个数n(不超过100):
    ");
     80     scanf("%d",&n);
     81     while(n>N||n<=0){
     82         printf("输入的数据有误,请重新输入
    ");
     83         printf("请输入小孩的个数n(不超过100):
    ");
     84         scanf("%d",&n);
     85     }
     86     printf("---------------------------------
    ");
     87     printf("请输入每个小孩的密码:
    ");
     88     for(i=1;i<=n;i++)
     89     {
     90         printf("编号为%d的小孩: ",i); 
     91         scanf("%d",&code[i]);
     92     }
     93     printf("---------------------------------
    ");
     94     printf("请输入第一次报数数目m:
    ");
     95     scanf("%d",&m);
     96     CreateList(h,n);
     97     printf("
    ");
     98     printf("---------------------------------
    ");
     99     printf("运行结果为:
    ");
    100     PrintList(h,m,code);
    101     return 0;
    102 }
    约瑟夫环
     1 #include<iostream>
     2 #include<stdlib.h>
     3 using namespace std;
     4 typedef struct LNode
     5 {
     6     int data;
     7     struct LNode *next;
     8 
     9 }LNode,*LinkList;
    10 
    11 LinkList CreateNode(int n)
    12 {
    13     LinkList LNode;
    14     LNode=(LinkList)malloc(sizeof(LNode));
    15     LNode->data=n;
    16     LNode->next=NULL;
    17     return LNode;
    18 }
    19 
    20 void CreateList(LinkList &pH, int n)
    21 {
    22     int k;
    23     LinkList p, t;
    24     p=CreateNode(1);
    25     t=p; 
    26     pH=p; 
    27     t->next=pH; 
    28     for(k=2;k<=n;k++)
    29     {    
    30         p=CreateNode(k);
    31         p->next=t->next;
    32         t->next=p;
    33         t=p;
    34     }
    35 }
    36 
    37 void PrintList(LinkList pH, int Ld)
    38 {
    39     LinkList p, temp,c;
    40     p=pH;
    41     int i;
    42     while(p->next!=p)
    43     {
    44         for(i=1;i<Ld;i++)
    45         {
    46             temp=p;
    47             p=p->next;
    48         }
    49         temp->next=p->next;
    50         c=p;
    51         //cout<<p->data<<' ';
    52         free(c);
    53         p=temp->next;
    54         
    55     }
    56     cout<<p->data<<endl;
    57     free(p);
    58     pH=NULL;
    59 }
    60 
    61 int main(){
    62     int n,m;
    63     while(cin>>n>>m){
    64         LinkList h=NULL;
    65         CreateList(h,n);
    66         PrintList(h,m);
    67     }
    68     return 0;
    69 }
    转载请标明出处
  • 相关阅读:
    动态二维码
    二维码
    购物车
    logback学习与配置使用
    UML类图几种关系的总结
    java.lang.Excetion,java.lang.RuntimeException,java.lang.Error有什么区别?
    Java编程最差实践
    Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
    从 Java 代码到 Java 堆
    Project configuration is not up-to-date with pom.xml
  • 原文地址:https://www.cnblogs.com/zq-dmhy/p/11074318.html
Copyright © 2020-2023  润新知