• 约瑟夫环问题


      约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
      

      这里给出的例子中,是从编号为1的人开始报数,数到5的人出列。

     

     1 /*约瑟夫环问题*/
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 typedef struct Node
     7 {    
     8     int    num;
     9     struct Node *next;
    10 }LinkList;
    11 
    12 //创建长度为 n 的链表
    13 LinkList *creat(int n)
    14 {
    15     LinkList *p,*q,*head;
    16     int i=1;  
    17     p=(LinkList *)malloc(sizeof(LinkList));
    18     p->num=i;
    19     head=p;
    20     for(i=2;i<=n;i++)
    21     {
    22         q=(LinkList *)malloc(sizeof(LinkList));
    23         q->num=i;
    24         p->next=q;
    25         p=q;        /*p指向当前节点*/
    26     }
    27     p->next=head;    /*使链表尾指向链表头,形成循环链表,相当于约瑟夫环*/
    28    return head;
    29 }
    30 
    31 void fun(LinkList *L,int m)
    32 {
    33     LinkList *p,*s,*q;
    34     p=L;
    35     printf("出列顺序为:");
    36     while(p->next != p)
    37     {
    38         for(int i=1;i<m;i++)
    39         {    q=p;
    40             p=p->next;
    41         }
    42         printf("%4d",p->num);
    43         s=p;            /*暂存节点,便于释放*/
    44         q->next=p->next;
    45         p=p->next;  
    46         free(s);        /*节点值输出后释放资源*/
    47     }
    48     printf("%4d
    ",p->num);  /*输出最后一个节点中数值*/
    49 }
    50 
    51 int main()
    52 {
    53     LinkList *L;
    54     int n, m;
    55     n=9;
    56     m=5;
    57     L=creat(n);
    58     fun(L,m);    
    59     return 0;
    60 }
  • 相关阅读:
    父div的透明度不影响子div透明度
    vue-组件命名
    前端页面优化技巧
    Webstorm添加新建.vue文件功能并支持高亮vue语法和es6语法
    防止被坑
    vue安装教程总结
    vue找错
    前段进阶之路
    VM4061 layui.js:2 Layui hint: form is not a valid module
    三月十一号
  • 原文地址:https://www.cnblogs.com/followyourdream/p/3372464.html
Copyright © 2020-2023  润新知