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分析nignx访问日志脚本分享
Feb 26 Python
python抽象基类用法实例分析
Jun 04 Python
Python写入CSV文件的方法
Jul 08 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
python统计多维数组的行数和列数实例
Jun 23 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
Python3+Appium安装使用教程
Jul 05 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
python图像处理模块Pillow的学习详解
Oct 09 Python
wxPython多个窗口的基本结构
Nov 19 Python
python自动化调用百度api解决验证码
Apr 13 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
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
python检测lvs real server状态
2014/01/22 Python
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
python使用tkinter实现简单计算器
2018/01/30 Python
谈谈Python中的while循环语句
2019/03/10 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
python ChainMap的使用和说明详解
2019/06/11 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
python基于win32api实现键盘输入
2020/12/09 Python
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
个人自我鉴定范文
2013/10/04 职场文书
毕业学生推荐信
2013/12/01 职场文书
小学少先队活动方案
2014/02/18 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL