美文网首页
约瑟夫环

约瑟夫环

作者: 鹿与云与雨 | 来源:发表于2019-11-27 15:37 被阅读0次

N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。

#include <iostream>
using namespace std;

struct Node
{
    int data = -1;
    struct Node* next = NULL;
};

Node* list(int n)              //创立循环链表
{
    int i = 0;                 
    Node* head = new Node;
    Node* list1;
    list1 = head;
    head->data = 1;
    head->next = NULL;
    for (i = 2; i <= n; i++)                      //创立后续节点
    {
        Node* list2 = new Node;
        list2->data = i;
        list2->next = NULL;
        list1->next = list2;
        list1 = list1->next;
    }
    list1->next = head;            //首尾相连
    return head;
}

int main()
{
    int i = 0, j = 0, N = 0, p = 0;
    cin >> N >> p;
    Node* head, * temp = NULL;
    head = list(N);
    for (i = 0; i < N - 1; i++)
    {
        for (j = 1; j < p; j++)
        {
            temp = head;
            head = head->next;                 //数人
        }
        cout << head->data<<' ';              //输出出列的人
        temp->next = head->next;                     //暂时存放下一位
        delete head;                           //删除出列的人
        head = temp->next;                           //将临时节点重新赋值给head
    }
    cout << head->data;
    return 0;
}

相关文章

  • 约瑟夫环问题

    约瑟夫环问题约瑟夫环描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围...

  • 循环单链表实现约瑟夫环(C语言)

    约瑟夫环

  • 约瑟夫环

    题目:100名学生围成一个圈, 编号从1到100,从第一名学生开始报数,从1-9报数 每报出9就退出,直到所有学生...

  • 约瑟夫环

  • 约瑟夫环

    问题:1~n个人围成一圈,从1开始报数,每次数到m这个人就出列,问最后剩下的是几号? 做法:递归。 假设剩下的是f...

  • 约瑟夫环

    解法一 用一个list模拟删除过程 解法二 数学公式,推到过程还没看懂

  • 约瑟夫环

    之前去面试的时候遇到这个问题,作为一只算法渣渣,自然带着恐惧的心情,然后自己瞎捣鼓了好长时间终于拼凑出来了一个很菜...

  • 约瑟夫环

  • 约瑟夫环

    复习一下关于约瑟夫环的实现原理: 如果用C来写的话,也会有许多的方法,比如1:采用链表(双向链表)2:递归3:队列...

  • 约瑟夫环

    公式法循环 公式法递归 链表法

网友评论

      本文标题:约瑟夫环

      本文链接:https://www.haomeiwen.com/subject/ycipwctx.html