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

约瑟夫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

相关文章:

  • 2025-05-07 Unity 网络基础8——UDP同步异步通信
  • 【EasyPan】saveShare代码分析
  • 企业智能化第一步:用「Deepseek+自动化」打造企业资源管理的智能中枢
  • DSENT (Design Space Exploration of Networks Tool) 配合gem5
  • day 14 SHAP可视化
  • C++:买房子
  • Vue——前端vue3项目使用汉字转拼音
  • #黑马点评#(一)登录功能
  • LangChain第三讲:大模型的输出如何格式化成字符串?
  • 阿里云服务器-宝塔面板安装【保姆级教程】
  • HarmonyOS NEXT深度解析:自研框架ArkUI-X的技术革命与跨平台实践
  • 本地部署 MySQL + Qwen3-1.5B + Flask + Dify 工作流
  • 动态规划-91.解码方法-力扣(LeetCode)
  • SPSS系统发育分析中的聚类相关part
  • 端口安全讲解
  • 《Python星球日记》 第44天: 线性回归与逻辑回归
  • 轻松管理房间预约——启辰智慧预约小程序端使用教程
  • 【图书管理系统】详细讲解用户登录:后端代码实现及讲解、前端代码讲解
  • feign负载均衡
  • 4.系统定时器基本定时器
  • 河南一县政府党组成员签订抵制违规吃喝问题承诺书,现场交给县长
  • 时隔3年,持续近2小时,俄乌在土耳其谈成了什么?
  • 【社论】城市更新,始终以人为核心
  • 泉州围头湾一港区项目炸礁被指影响中华白海豚,官方:已叫停重新评估
  • 江苏省委组织部副部长高颜已任南京市委常委、组织部部长
  • 证监会:2024年依法从严查办证券期货违法案件739件,作出处罚决定592件、同比增10%