首页 / PYTHON / 孩子们的游戏(python)
孩子们的游戏(python)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了孩子们的游戏(python),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1231字,纯文字阅读大概需要2分钟。
内容图文
一,问题描述:
游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友拿到礼品。那么哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)
如果没有小朋友,请返回-1
二,问题分析:
这是个经典的约瑟夫环问题
我们将m,n具现化
假设m=4,现在有七个小朋友,n=7.数到4的被干掉
我们着重研究下吃鸡者 李二的成功之路
第一轮中,有n=7人,李二的位置是1
第二轮中,有n=6人,李二的位置是4
第三轮中,有n=5人,李二的位置是0
我们把李二第一轮的位置记作f(1)
第二轮的位置记作f(2)
第三轮的位置记作f(3)
我们发现,
1=(4+4)%7
f(1)=【f(2)+m】%n
4=(0+4)%6
f(2)=【f(3)+m】%n
求第几轮的位置就要对那轮的人数取模
因此便有了
f(上一把)=【f(下一把)+m】%上一把人数
知道优胜者是谁,然后从下往上倒着推,就能知道他在一开始的时候的编号
我们知道这游戏至少有两个人才能玩起来。因为一个人玩的话,他就是优胜者,且他的编号为0
因此我们有了初始条件 f(一个人玩)=0
于是f(两个人玩)=【f(一个人玩)+m】%2人 = 【0+4】%2 = 0
f(三个人玩)=【f(两个人玩)+m】%3人 = 【0+4】%3 = 1
。。。
f(n个人玩)=【f(n-1 个人玩)+m】%n人
这样我们就能知道当有n个人一起玩的时候,这个优胜者在那时的位置编号了
三,代码实现:
内容总结
以上是互联网集市为您收集整理的孩子们的游戏(python)全部内容,希望文章能够帮你解决孩子们的游戏(python)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。