约瑟夫问题(单链)

P1996 约瑟夫问题

题目描述

n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。

注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰 n1 名小朋友,而该题是全部出圈。

输入格式

输入两个整数 n,m

输出格式

输出一行 n 个整数,按顺序输出每个出圈人的编号。

输入输出样例 #1

输入 #1

10 3

输出 #1

3 6 9 2 7 1 8 5 10 4

说明/提示

1m,n100

直接看代码

相当于环状链,逐步取出节点的过程,这篇写得详细约瑟夫问题


#include<iostream>
#include<cstring>
using namespace std;

const int N = 200;
int p[N],ne[N];

int main() {
    int n, m;
    cin >> n >> m;
    for(int i = 0;i < n;++i) ne[i] = i + 1;  //留着0,这样输出的时候至少有两个节点,k
    ne[n] = 1;
    int p = 0;
    for(int i = 1;i <= n;++i) {
        for(int j = 1;j < m;++j)
            p = ne[p];
        cout << ne[p] <<' ';   //到m-1的位置,方便输出下一位
        int t = p;              // 
        p = ne[p];              //
        ne[t] = ne[ne[t]];      //这里删除m位节点,并且p指向被删除节点,因为,从0位移动m-1次才到m-1位
        

    }


    return 0;
}
posted @   bakul  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示