约瑟夫问题(单链)
P1996 约瑟夫问题
题目描述
注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰
输入格式
输入两个整数
输出格式
输出一行
输入输出样例 #1
输入 #1
10 3
输出 #1
3 6 9 2 7 1 8 5 10 4
说明/提示
直接看代码
相当于环状链,逐步取出节点的过程,这篇写得详细约瑟夫问题
#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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!