· 洛谷P1996约瑟夫问题数据结构链表模拟法

洛谷P1996约瑟夫问题数据结构链表模拟法

246 字
1 分钟
洛谷P1996约瑟夫问题数据结构链表模拟法
StarryLin/Geek · 摘要

本文讲解洛谷P1996约瑟夫问题的链表模拟解法:用数组构造首尾相连的循环链表,从上一出圈者前驱出发报数m次定位出列者并输出其编号,再删除该节点,直到所有人出圈。

——————————-—本文旨在讨论和交流计算机知识,欢迎指正!!!—————————

题目描述#

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

输入格式#

输入两个整数 n,m。

输出格式#

输出一行 n 个整数,按顺序输出每个出圈人的编号。 既然这一题要求我们输出出圈人的编号,我们用链表模拟的时候不用模拟值的数组,只用模拟首尾相连的过程即可;

#include
using namespace std;
const int N=1e5+9;
int ne[N];
int n,m;//初始化

首先,我们模拟首尾相连的环状结构

cin>>n>>m;
for(int i=1;i
using namespace std;
const int N=1e5+9;
int ne[N];
int n,m;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
ne[i]=i+1;
}
ne[n]=1;
int pre=n;
for(int cnt=0;cnt<n;cnt++)
{
for(int j=0;j<m-1;j++)
{
pre=ne[pre];
}
cout<<ne[pre]<<" ";
ne[pre]=ne[ne[pre]];
}
return 0;
}

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

洛谷P1996约瑟夫问题数据结构链表模拟法
https://mjzy.tech/posts/knowledge/洛谷p1996约瑟夫问题数据结构链表模拟法/
作者
JIA
发布于
2026-06-21
许可协议
CC BY-NC-SA 4.0

评论区

正在加载 GitHub 评论…

Tips · 随手记
仅自己可见 · 每篇文章单独保存

文章目录