Python实现约瑟夫环问题的方法


Posted in Python onMay 03, 2016

本文实例讲述了Python实现约瑟夫环问题的方法。分享给大家供大家参考,具体如下:

题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

定义函数f(n,m),表示每次在n个数字(0,1,...,n-1)中每次删除第m个数字后最后剩下的数字。

在n个数字中,假设第一个被删除的数字为k,那么删除k之后剩下的n-1个数字为0~k-1,k 1~n-1,并且下一次删除从数字k 1开始计数。第二个序列最后剩下的数字也就是我们要求的数字。于是我们对于剩下的n-1个数字重新编号,k 1编号为0,k 2编号为1,...,0编号为n-k-1,1编号为n-k,k-1编号为n-2,假设f(n-1, m) = x,即n-1个数中,每次删除第m个,最后剩下的数字编号为x,那么这个x就对应着原序列(n个数)中的编号(x + m) % n。可以得到递推关系:

f(n,m)=0, n=1
f(n,m)=[f(n-1,m) + m]%n n>1

Python代码:

#coding=utf8
'''
题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
'''
def josephus(n, m):
  if type(n) != type(1) or n <= 0:
    raise Exception('n must be an integer(n > 0)')
  if n == 1:
    return 0
  else:
    return (josephus(n - 1, m) + m) % n
if __name__ == '__main__':
  print josephus(8, 3)
  print josephus(1, 2)
  print josephus(0, 2)

更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现DES加密解密方法实例详解
Jun 30 Python
Python实现模拟登录网易邮箱的方法示例
Jul 05 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
python中sort和sorted排序的实例方法
Aug 26 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 Python
Flask 上传自定义头像的实例详解
Jan 09 Python
python使用PIL剪切和拼接图片
Mar 23 Python
Keras实现DenseNet结构操作
Jul 06 Python
解析python 类方法、对象方法、静态方法
Aug 15 Python
Python爬虫之爬取某文库文档数据
Apr 21 Python
python numpy中multiply与*及matul 的区别说明
May 26 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 Python
Python实现堆排序的方法详解
May 03 #Python
python web框架学习笔记
May 03 #Python
Python批量修改文本文件内容的方法
Apr 29 #Python
Python+Opencv识别两张相似图片
Mar 23 #Python
Python实现包含min函数的栈
Apr 29 #Python
Python二叉搜索树与双向链表转换实现方法
Apr 29 #Python
Python实现简单字典树的方法
Apr 29 #Python
You might like
php 执行系统命令的方法
2009/07/07 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
实例讲解php实现多线程
2019/01/27 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
vue Render中slots的使用的实例代码
2017/07/19 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
python读取和保存图片5种方法对比
2018/09/12 Python
python的concat等多种用法详解
2018/11/28 Python
python print出共轭复数的方法详解
2019/06/25 Python
Python实现微信机器人的方法
2019/09/06 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
保健品市场营销方案
2014/03/31 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
运动会宣传口号
2014/06/09 职场文书
办理信用卡工作证明
2014/09/30 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript