正在加载内容…
洛谷P1996约瑟夫问题数据结构链表模拟法
246 字
1 分钟
洛谷P1996约瑟夫问题数据结构链表模拟法
本文讲解洛谷P1996约瑟夫问题的链表模拟解法:用数组构造首尾相连的循环链表,从上一出圈者前驱出发报数m次定位出列者并输出其编号,再删除该节点,直到所有人出圈。
——————————-—本文旨在讨论和交流计算机知识,欢迎指正!!!—————————
题目描述
n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
输入格式
输入两个整数 n,m。
输出格式
输出一行 n 个整数,按顺序输出每个出圈人的编号。 既然这一题要求我们输出出圈人的编号,我们用链表模拟的时候不用模拟值的数组,只用模拟首尾相连的过程即可;
#includeusing namespace std;const int N=1e5+9;int ne[N];int n,m;//初始化首先,我们模拟首尾相连的环状结构
cin>>n>>m;for(int i=1;iusing 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约瑟夫问题数据结构链表模拟法/ 相关文章 智能推荐
1
洛谷P1010递归法题解
算法题解 本文讲解洛谷P1010幂次方递归解法:将n按2的幂拆分,用递归输出带括号的2的幂表达式,并以2的0次方和1次方为递归终点。
2
洛谷P1115最大字段和的前缀和做法
算法题解 本文介绍洛谷P1115最大子段和的前缀和做法:先求前缀和,遍历时用当前前缀和减此前最小前缀和更新答案,避免滑动窗口的平方复杂度,实现O(n)求解。
3
拓展单向循环链表
数据结构 本文讲解单向循环链表的C语言实现,先分析带头结点与尾指针的结构设计,再给出初始化、头插、尾插、删除、遍历和销毁函数。边界是仅讨论实现思路,未展开约瑟夫环测试。
4
数据结构顺序队列及链式队列
数据结构 本文讲解顺序队列与链式队列的实现:顺序队列用取余循环移动队头队尾,并以虚空一格判断队满,避免假溢出;链式队列以单链表节点完成入队出队。
5
链表的实现与介绍
数据结构 本文介绍链表的结构与C语言实现,针对顺序表内存碎片问题引出链式存储。讲解节点数据域与地址域,给出初始化、按位插入、按值删除及遍历等函数代码。讨论限于无操作系统内存分配场景。
随机文章 随机推荐
评论区
正在加载 GitHub 评论…