zoukankan      html  css  js  c++  java
  • 单循环链表 解决约瑟夫环的问题

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

    #include<stdio.h>
    #include<malloc.h>
    typedef struct node{
    int num;
    struct node* next;
    }Node;

    Node *creat(int n){
    Node *p,*q,*head;
    p=(Node *)malloc(sizeof(Node));
    head = p;
    p->num = 1;
    for(int i=2;i<=n;i++){
    q=(Node *)malloc(sizeof(Node));
    q->num = i;
    p->next = q;
    p = q;
    }

    p->next = head; //最后一个节点的指针指向头指针,形成循环

    return head;
    }

    void link_process(Node *head,int k,int m){
    Node *p =head,*temp;
    while(p->num!=k) //使当前指针移动到k的位置
    p=p->next;

    while(p->next!=p) //p->next == p 时表明这个链表中只剩下一个节点了,结束循环
    {
    for(int i=1;i<m;i++){
    temp = p;
    p=p->next;
    }
    printf("%d",p->num);

    temp->next = p->next;
    free(p);
    p=temp->next;
    }

    printf("%d",p->num);
    free(p);
    }

    int main(){

    int n,m,k;
    scanf("%d%d%d",&n,&k,&m);

    Node *head = creat(n);

    link_process(head,k,m);


    return 0;

    }

  • 相关阅读:
    elasticsearch 相关命令
    Ubuntu server 修改系统时区
    js-eval运算符
    js-带操作的赋值表达式
    MVC模型绑定
    MVC部分视图的使用
    C#面试题-递归
    C#校验手机端或客户端
    AngularJs 中使用OpenLayer例子,手机端地图加载不显示问题
    C#后端调用WebApi地址
  • 原文地址:https://www.cnblogs.com/chenbo820/p/7647104.html
Copyright © 2011-2022 走看看