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实现包含min函数的栈
Apr 29 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
详解Python中的正则表达式
Jul 08 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
python3 enum模块的应用实例详解
Aug 12 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
如何基于Python代码实现高精度免费OCR工具
Jun 18 Python
python代数式括号有效性检验示例代码
Oct 04 Python
Python+Appium新手教程
Apr 17 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 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 Mysql类 可以参考学习熟悉下
2009/06/21 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
php数组添加元素方法小结
2014/12/20 PHP
php时间计算相关问题小结
2016/05/09 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python正则表达式使用经典实例
2016/06/21 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
上班打牌检讨书
2014/02/07 职场文书
小学新学期寄语
2014/04/02 职场文书
四年级学生评语大全
2014/04/21 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
法人代表证明书
2014/09/18 职场文书
求职自我评价怎么写
2015/03/09 职场文书
任命书格式范文
2015/09/22 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android