当前位置: 首页 > ds >正文

约瑟夫josephu问题

描述

设编号为1、2、3……n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,报数为m的人出列;之后相邻的下一位又从1开始报数,报数为m的人又出列。以此类推,直到所有人出列为止,由此产生一个出队编号的序列。

实现

package mainimport "fmt"type student struct {id   intnext *student
}// 遍历
// func check(start_node *student, current_node *student) {
// 	if current_node.next != start_node {
// 		fmt.Printf("本节点的id为%d\n", current_node.id)
// 		check(start_node, current_node.next)
// 	} else {
// 		fmt.Printf("最后节点的id为%d\n", current_node.id)
// 	}
// }// 删除
func delete(current_node *student, n int, m int) {if (m == 1) && (n > 1) {// k_node就是目标节点的前一个节点,所以不用m的挪位prev := current_nodedest := current_node.nextnxt := current_node.next.nextdest.next = nilprev.next = nxtfmt.Printf("出列节点的id为%d,前一节点%d的next指针已经指向后一节点%d,地址为%p\n", dest.id, prev.id, nxt.id, prev.next)delete(prev, n-1, m)}if (m >= 2) && (n > 1) {// 因为移动m-1次,到达目标m,所以移动m-2次,到达目标节点的前一个节点for i := 1; i <= (m - 2); i++ {current_node = current_node.next}prev := current_nodedest := current_node.nextnxt := current_node.next.nextdest.next = nilprev.next = nxtfmt.Printf("出列节点的id为%d,前一节点%d的next指针已经指向后一节点%d,地址为%p\n", dest.id, prev.id, nxt.id, prev.next)delete(prev.next, n-1, m)}if n == 1 {current_node.next = nilfmt.Printf("最后出列节点的id为%d,地址为%p\n", current_node.id, current_node.next)}}func main() {var n int = 44var k int = 6// var m int = 1// var m int = 2var m int = 14// 生成// 临时结构体previous_node := &student{}// 第一个结构体s1 := &student{id: 1}previous_node = s1for i := 2; i <= n; i++ {s := &student{id: i}previous_node.next = s// 挪位previous_node = s}// 成环:最后一个结构体的next指针指向第一个结构体previous_node.next = s1// check(s1, s1)k_node := &student{}if m >= 2 {// 先移动k-1次,到达编号为k的节点temp_node := s1for i := 1; i <= (k - 1); i++ {temp_node = temp_node.next}k_node = temp_node}if m == 1 {// 先移动k-2次,到达编号为k-1的节点temp_node := s1for i := 1; i <= (k - 2); i++ {temp_node = temp_node.next}k_node = temp_node}delete(k_node, n, m)
}
m = 1出列节点的id为6,前一节点5的next指针已经指向后一节点7,地址为0xc000024100
出列节点的id为7,前一节点5的next指针已经指向后一节点8,地址为0xc000024110
出列节点的id为8,前一节点5的next指针已经指向后一节点9,地址为0xc000024120
出列节点的id为9,前一节点5的next指针已经指向后一节点10,地址为0xc000024130
出列节点的id为10,前一节点5的next指针已经指向后一节点11,地址为0xc000024140
出列节点的id为11,前一节点5的next指针已经指向后一节点12,地址为0xc000024150
出列节点的id为12,前一节点5的next指针已经指向后一节点13,地址为0xc000024160
出列节点的id为13,前一节点5的next指针已经指向后一节点14,地址为0xc000024170
出列节点的id为14,前一节点5的next指针已经指向后一节点15,地址为0xc000024180
出列节点的id为15,前一节点5的next指针已经指向后一节点16,地址为0xc000024190
出列节点的id为16,前一节点5的next指针已经指向后一节点17,地址为0xc0000241a0
出列节点的id为17,前一节点5的next指针已经指向后一节点18,地址为0xc0000241b0
出列节点的id为18,前一节点5的next指针已经指向后一节点19,地址为0xc0000241c0
出列节点的id为19,前一节点5的next指针已经指向后一节点20,地址为0xc0000241d0
出列节点的id为20,前一节点5的next指针已经指向后一节点21,地址为0xc0000241e0
出列节点的id为21,前一节点5的next指针已经指向后一节点22,地址为0xc0000241f0
出列节点的id为22,前一节点5的next指针已经指向后一节点23,地址为0xc000024200
出列节点的id为23,前一节点5的next指针已经指向后一节点24,地址为0xc000024210
出列节点的id为24,前一节点5的next指针已经指向后一节点25,地址为0xc000024220
出列节点的id为25,前一节点5的next指针已经指向后一节点26,地址为0xc000024230
出列节点的id为26,前一节点5的next指针已经指向后一节点27,地址为0xc000024240
出列节点的id为27,前一节点5的next指针已经指向后一节点28,地址为0xc000024250
出列节点的id为28,前一节点5的next指针已经指向后一节点29,地址为0xc000024260
出列节点的id为29,前一节点5的next指针已经指向后一节点30,地址为0xc000024270
出列节点的id为30,前一节点5的next指针已经指向后一节点31,地址为0xc000024280
出列节点的id为31,前一节点5的next指针已经指向后一节点32,地址为0xc000024290
出列节点的id为32,前一节点5的next指针已经指向后一节点33,地址为0xc0000242a0
出列节点的id为33,前一节点5的next指针已经指向后一节点34,地址为0xc0000242b0
出列节点的id为34,前一节点5的next指针已经指向后一节点35,地址为0xc0000242c0
出列节点的id为35,前一节点5的next指针已经指向后一节点36,地址为0xc0000242d0
出列节点的id为36,前一节点5的next指针已经指向后一节点37,地址为0xc0000242e0
出列节点的id为37,前一节点5的next指针已经指向后一节点38,地址为0xc0000242f0
出列节点的id为38,前一节点5的next指针已经指向后一节点39,地址为0xc000024300
出列节点的id为39,前一节点5的next指针已经指向后一节点40,地址为0xc000024310
出列节点的id为40,前一节点5的next指针已经指向后一节点41,地址为0xc000024320
出列节点的id为41,前一节点5的next指针已经指向后一节点42,地址为0xc000024330
出列节点的id为42,前一节点5的next指针已经指向后一节点43,地址为0xc000024340
出列节点的id为43,前一节点5的next指针已经指向后一节点44,地址为0xc000024350
出列节点的id为44,前一节点5的next指针已经指向后一节点1,地址为0xc0000240a0
出列节点的id为1,前一节点5的next指针已经指向后一节点2,地址为0xc0000240b0
出列节点的id为2,前一节点5的next指针已经指向后一节点3,地址为0xc0000240c0
出列节点的id为3,前一节点5的next指针已经指向后一节点4,地址为0xc0000240d0
出列节点的id为4,前一节点5的next指针已经指向后一节点5,地址为0xc0000240e0
最后出列节点的id为5,地址为0x0
m = 2出列节点的id为7,前一节点6的next指针已经指向后一节点8,地址为0xc000024110
出列节点的id为9,前一节点8的next指针已经指向后一节点10,地址为0xc000024130  
出列节点的id为11,前一节点10的next指针已经指向后一节点12,地址为0xc000024150
出列节点的id为13,前一节点12的next指针已经指向后一节点14,地址为0xc000024170
出列节点的id为15,前一节点14的next指针已经指向后一节点16,地址为0xc000024190
出列节点的id为17,前一节点16的next指针已经指向后一节点18,地址为0xc0000241b0
出列节点的id为19,前一节点18的next指针已经指向后一节点20,地址为0xc0000241d0
出列节点的id为21,前一节点20的next指针已经指向后一节点22,地址为0xc0000241f0
出列节点的id为23,前一节点22的next指针已经指向后一节点24,地址为0xc000024210
出列节点的id为25,前一节点24的next指针已经指向后一节点26,地址为0xc000024230
出列节点的id为27,前一节点26的next指针已经指向后一节点28,地址为0xc000024250
出列节点的id为29,前一节点28的next指针已经指向后一节点30,地址为0xc000024270
出列节点的id为31,前一节点30的next指针已经指向后一节点32,地址为0xc000024290
出列节点的id为33,前一节点32的next指针已经指向后一节点34,地址为0xc0000242b0
出列节点的id为35,前一节点34的next指针已经指向后一节点36,地址为0xc0000242d0
出列节点的id为37,前一节点36的next指针已经指向后一节点38,地址为0xc0000242f0
出列节点的id为39,前一节点38的next指针已经指向后一节点40,地址为0xc000024310
出列节点的id为41,前一节点40的next指针已经指向后一节点42,地址为0xc000024330
出列节点的id为43,前一节点42的next指针已经指向后一节点44,地址为0xc000024350
出列节点的id为1,前一节点44的next指针已经指向后一节点2,地址为0xc0000240b0
出列节点的id为3,前一节点2的next指针已经指向后一节点4,地址为0xc0000240d0
出列节点的id为5,前一节点4的next指针已经指向后一节点6,地址为0xc0000240f0
出列节点的id为8,前一节点6的next指针已经指向后一节点10,地址为0xc000024130
出列节点的id为12,前一节点10的next指针已经指向后一节点14,地址为0xc000024170
出列节点的id为16,前一节点14的next指针已经指向后一节点18,地址为0xc0000241b0
出列节点的id为20,前一节点18的next指针已经指向后一节点22,地址为0xc0000241f0
出列节点的id为24,前一节点22的next指针已经指向后一节点26,地址为0xc000024230
出列节点的id为28,前一节点26的next指针已经指向后一节点30,地址为0xc000024270
出列节点的id为32,前一节点30的next指针已经指向后一节点34,地址为0xc0000242b0
出列节点的id为36,前一节点34的next指针已经指向后一节点38,地址为0xc0000242f0
出列节点的id为40,前一节点38的next指针已经指向后一节点42,地址为0xc000024330
出列节点的id为44,前一节点42的next指针已经指向后一节点2,地址为0xc0000240b0
出列节点的id为4,前一节点2的next指针已经指向后一节点6,地址为0xc0000240f0
出列节点的id为10,前一节点6的next指针已经指向后一节点14,地址为0xc000024170
出列节点的id为18,前一节点14的next指针已经指向后一节点22,地址为0xc0000241f0
出列节点的id为26,前一节点22的next指针已经指向后一节点30,地址为0xc000024270
出列节点的id为34,前一节点30的next指针已经指向后一节点38,地址为0xc0000242f0
出列节点的id为42,前一节点38的next指针已经指向后一节点2,地址为0xc0000240b0
出列节点的id为6,前一节点2的next指针已经指向后一节点14,地址为0xc000024170
出列节点的id为22,前一节点14的next指针已经指向后一节点30,地址为0xc000024270
出列节点的id为38,前一节点30的next指针已经指向后一节点2,地址为0xc0000240b0
出列节点的id为14,前一节点2的next指针已经指向后一节点30,地址为0xc000024270
出列节点的id为2,前一节点30的next指针已经指向后一节点30,地址为0xc000024270
最后出列节点的id为30,地址为0x0
m = 14出列节点的id为19,前一节点18的next指针已经指向后一节点20,地址为0xc0000241d0
出列节点的id为33,前一节点32的next指针已经指向后一节点34,地址为0xc0000242b0
出列节点的id为3,前一节点2的next指针已经指向后一节点4,地址为0xc0000240d0
出列节点的id为17,前一节点16的next指针已经指向后一节点18,地址为0xc0000241b0
出列节点的id为32,前一节点31的next指针已经指向后一节点34,地址为0xc0000242b0
出列节点的id为4,前一节点2的next指针已经指向后一节点5,地址为0xc0000240e0
出列节点的id为20,前一节点18的next指针已经指向后一节点21,地址为0xc0000241e0
出列节点的id为36,前一节点35的next指针已经指向后一节点37,地址为0xc0000242e0
出列节点的id为8,前一节点7的next指针已经指向后一节点9,地址为0xc000024120
出列节点的id为25,前一节点24的next指针已经指向后一节点26,地址为0xc000024230
出列节点的id为42,前一节点41的next指针已经指向后一节点43,地址为0xc000024340
出列节点的id为15,前一节点14的next指针已经指向后一节点16,地址为0xc000024190
出列节点的id为35,前一节点34的next指针已经指向后一节点37,地址为0xc0000242e0
出列节点的id为10,前一节点9的next指针已经指向后一节点11,地址为0xc000024140
出列节点的id为29,前一节点28的next指针已经指向后一节点30,地址为0xc000024270
出列节点的id为6,前一节点5的next指针已经指向后一节点7,地址为0xc000024100
出列节点的id为27,前一节点26的next指针已经指向后一节点28,地址为0xc000024250
出列节点的id为5,前一节点2的next指针已经指向后一节点7,地址为0xc000024100
出列节点的id为28,前一节点26的next指针已经指向后一节点30,地址为0xc000024270
出列节点的id为9,前一节点7的next指针已经指向后一节点11,地址为0xc000024140
出列节点的id为34,前一节点31的next指针已经指向后一节点37,地址为0xc0000242e0
出列节点的id为14,前一节点13的next指针已经指向后一节点16,地址为0xc000024190
出列节点的id为41,前一节点40的next指针已经指向后一节点43,地址为0xc000024340
出列节点的id为24,前一节点23的next指针已经指向后一节点26,地址为0xc000024230
出列节点的id为12,前一节点11的next指针已经指向后一节点13,地址为0xc000024160
出列节点的id为43,前一节点40的next指针已经指向后一节点44,地址为0xc000024350
出列节点的id为31,前一节点30的next指针已经指向后一节点37,地址为0xc0000242e0
出列节点的id为22,前一节点21的next指针已经指向后一节点23,地址为0xc000024200
出列节点的id为16,前一节点13的next指针已经指向后一节点18,地址为0xc0000241b0
出列节点的id为11,前一节点7的next指针已经指向后一节点13,地址为0xc000024160
出列节点的id为7,前一节点2的next指针已经指向后一节点13,地址为0xc000024160
出列节点的id为13,前一节点2的next指针已经指向后一节点18,地址为0xc0000241b0
出列节点的id为21,前一节点18的next指针已经指向后一节点23,地址为0xc000024200
出列节点的id为30,前一节点26的next指针已经指向后一节点37,地址为0xc0000242e0
出列节点的id为40,前一节点39的next指针已经指向后一节点44,地址为0xc000024350
出列节点的id为23,前一节点18的next指针已经指向后一节点26,地址为0xc000024230
出列节点的id为1,前一节点44的next指针已经指向后一节点2,地址为0xc0000240b0
出列节点的id为44,前一节点39的next指针已经指向后一节点2,地址为0xc0000240b0
出列节点的id为18,前一节点2的next指针已经指向后一节点26,地址为0xc000024230
出列节点的id为39,前一节点38的next指针已经指向后一节点2,地址为0xc0000240b0
出列节点的id为26,前一节点2的next指针已经指向后一节点37,地址为0xc0000242e0
出列节点的id为38,前一节点37的next指针已经指向后一节点2,地址为0xc0000240b0
出列节点的id为37,前一节点2的next指针已经指向后一节点2,地址为0xc0000240b0
最后出列节点的id为2,地址为0x0
http://www.xdnf.cn/news/4585.html

相关文章:

  • 企业数字化转型第二课:接受不完美(1/2)
  • MCP相关标的梳理
  • ​​大疆无人机“指点飞行模式”​​(TapFly)
  • 居民健康监测小程序|基于微信小程序的居民健康监测小程序设计与实现(源码+数据库+文档)
  • RT Thread Studio创建软件和硬件RTC工程
  • WebGIS开发面试题:前端篇(三)
  • 深入理解Java反射机制
  • 基于Node.js的Web爬虫: 使用Axios和Cheerio抓取网页数据
  • 强化学习之蒙特卡洛树搜索和噪声网络
  • 精益数据分析(45/126):媒体网站商业模式的深度剖析与挑战应对
  • 【Python】字符串 转为 JSON 格式的注意事项
  • ASP.NET MVC4 技术单选及多选题目汇编
  • 策略优化基础网格搜索与参数优化
  • 交替序列长度的最大值
  • Feign 重试策略调整:优化微服务通信的稳定性
  • pod声明周期
  • 行业先锋:六款产品的实战表现
  • PageRank和TextRank
  • 源码分析之Leaflet中的LayerGroup
  • LLM :Function Call、MCP协议与A2A协议
  • 基于神经网络的 YOLOv8、MobileNet、HigherHRNet 姿态检测比较研究
  • uniapp-商城-43-shop 后台管理 页面
  • 音频相关基础知识
  • JavaScript ES6+ 最佳实践
  • 将Dify平台开发的工作流集成到Open WebUI中
  • 金融小知识
  • 【实战教程】零基础搭建DeepSeek大模型聊天系统 - Spring Boot+React完整开发指南
  • ChromaDB调用BGE模型的两种实践方式
  • 学习基本开锁知识
  • 【一篇详解】深入浅出RabbtiMQ消息队列