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实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
在Django的视图(View)外使用Session的方法
Jul 23 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 Python
python WindowsError的错误代码详解
Jul 23 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
python批量爬取下载抖音视频
Jun 17 Python
python 实现绘制整齐的表格
Nov 18 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
python opencv角点检测连线功能的实现代码
Nov 24 Python
matplotlib相关系统目录获取方式小结
Feb 03 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
使用Apache的rewrite技术
2006/06/22 PHP
第十一节 重载 [11]
2006/10/09 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
php单例模式实现方法分析
2015/03/14 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
Javascript中replace()小结
2015/09/30 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
python异常触发及自定义异常类解析
2019/08/06 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
opencv3/C++ 平面对象识别&amp;透视变换方式
2019/12/11 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
Python实现手绘图效果实例分享
2020/07/22 Python
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
为什么要有struct关键字
2012/05/08 面试题
土木工程应届生自荐信
2013/09/24 职场文书
主管职责范文
2013/11/09 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
社团活动总结
2014/04/28 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP