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完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
Python内置数据类型详解
Aug 18 Python
Python处理json字符串转化为字典的简单实现
Jul 07 Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
Python json模块dumps、loads操作示例
Sep 06 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
对python生成业务报表的实例详解
Feb 03 Python
python实现转圈打印矩阵
Mar 02 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
OpenCV 边缘检测
Jul 10 Python
python基于机器学习预测股票交易信号
May 25 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
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
Python Web框架Tornado运行和部署
2020/10/19 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
详解python 内存优化
2020/08/17 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
抗洪救灾标语
2014/10/08 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书