zoukankan      html  css  js  c++  java
  • 数据结构实训(二)--- 约瑟夫环

    约瑟夫(Flavius Josephu)是公元1世纪的一位著名历史学家。约瑟夫环(也称为约瑟夫问题)是一个数学的应用问题,可以简单地表述如下:
    已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列,他的下一个人又从1开始报数,数到m的那个人又出列,依此规律重复下去,直到圆桌周围只剩下一个人为止。
    【输入形式】参与游戏的总人数,退出游戏的数字以及游戏开始的数字。
    【输出形式】游戏最后剩余的编号。
    【样例输入】
    15 4 2
    【样例输出】
    14
    【说明】考虑到该问题模型是个环,所以可以用循环队列解决。考虑到频繁地插入和删除操作,所以用队列的链式存储结构,即循环单链表。为了统一对表中任意结点的操作,循环单链表可以不带头结点,当然也可以带有头结点。

    #include<iostream>
    using namespace std;
    
    struct node
    {
        int data;
        node* next;
    };
    
    class cirLinkList
    {
    public:
        cirLinkList(int length)
        {
            rear = new node;  // 尾指针
            rear->data = 1;
            rear->next = rear;
    
            for(int i=2; i<=length; i++)    // 循环链表构建
            {
                node* p = new node;
                p->data = i;
                p->next = rear->next;
                rear->next = p;
                rear = p;
            }
        };
    
        int Joseph(int out, int beg)
        {
            node* pre = rear, *s = NULL; // 起始位置
            beg = beg-1;
            while(beg--)    // 找到游戏起始位置
            {
                pre = pre->next;
            }
            s = pre->next;
            int countOut = 1;
            while(s->next!=s)
            {
                if(countOut < out)
                {
                    pre = s;
                    s = s->next;
                    countOut++;
                }
                else {
                    pre->next = s->next;
                    delete s;
                    s = pre->next;
                    countOut=1;
                }
            }
            return s->data;
        }
    private:
        node* rear;
    };
    
    int main()
    {
        int n, k, m;
        cin >> n >> k >> m;
    
        cirLinkList a(n);
        cout << a.Joseph(k, m);
    }
  • 相关阅读:
    物理机异常断电,linux虚拟机系统磁盘mount失败,导致无法启动; kubectl 连接失败
    [Docker] 制作并运行 Nginx 镜像
    [Docker] 在CentOS6.8 安装 Docker
    47.DOM例题
    46.脚本化css2
    44 脚本化操作css
    43.操作标签属性
    42回顾
    41:例题、知识点复习
    40.数组字符串例题
  • 原文地址:https://www.cnblogs.com/DullRabbit/p/12558879.html
Copyright © 2011-2022 走看看