约瑟夫环问题

约瑟夫(josephus)环:假设有n个小孩坐成一个环,并且从第一个小孩开始数, 如果数到m个小孩,则该小该离开,问最后留下的小孩是第几个小孩?

例如:总共有6个小孩,围成一圈,从第一个小孩开始,每次数2个小孩。

游戏情况如下: 小孩序号:1,2,3,4,5,6 离开小孩序号:2,4,6,3,1 最后获胜小孩序号:5

1、简单办法:(如果只要求输出最后获胜的小孩编号,以下办法可以采用---具体数学第一章有一节专门讲这个的)

 

2、以下用链表处理约瑟夫环问题(代码仅为参考,没设置密码位,即至始至终m值是不变的)

如果题目要求每个人手里有一个密码,当这个人离开时,他应该将自己的密码赋值给m,然后输出自己,那么法一实现起来就并不那么容易了。这是使用单循环链表无疑是一个非常不错的选择。

单循环链表,模拟了人的组织结构----一圈,并且不需要因为哪个人被踢出去,改变已有的组织结构(只需要动态删除即可),也不需要设置标志位。

对于链表中的每个人,我们可以考虑给其一个结构,内含有这个人的编号,以及密码。当然,我们也可以设置一个全局的结构保存,共有多少个人,已经出去了多少人,为了后来新的需求:假设剩下k个人后,程序就停止。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值