内容简介:基本思路: 略!!:smile:玩一波:
利用单向环形链表解决约瑟夫问题
一开始我是想用list来解决的,但我想了很久都想不出来,只能用自定义的单向环形链表解决了。
基本思路: 略!!:smile:
直接上代码吧
//单向环形链表解决约瑟夫问题 package main import "fmt" //创建一个带自身指针的结构体 type node struct { no int next *node } //创建两个标记变量,head标记第一个结点,tail标记最后一个结点 var head, tail *node //追加结点 func addNode(n *node) { if tail == nil { head = n n.next = head tail = n } else { tail.next = n n.next = head tail = n //把链表最后一个的地址放到tail,即tail就是最后一个 } } //约瑟夫环,从编号为k的人开始报数,数到num的那个人出列 func joseph(k, num int) { //记数变量 count := 1 //先移动到第k个人 for i := 0; i < k-1; i++ { head = head.next tail = tail.next } //游戏从第k个人那里开始 for { count++ //开始记数 head = head.next tail = tail.next if count == num { //打印出数到num的人,并且让其出局 fmt.Println(head.no, "号出局") tail.next = head.next head = head.next count = 1 } //游戏剩最后一个人的时候结束 if head == tail { fmt.Println(head.no, "号赢得了游戏") break } } }
玩一波:
func main() { for i := 0; i < 5; i++ { n := &node{ no: i + 1, } //追加结点 addNode(n) } //从第一个人开始,数到3的那个人出列 joseph(1, 3) }
总结:golang自带的list是不是不能直接用来解决该问题(本人新手,望批评指正!!)
有哪位大神能用golang自带的list来解决吗?
如果确实不能用golang自带的list来解决,请给出个肯定的回答,好让我不要钻牛角尖
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。