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 相关文章推荐
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
Python的SQLAlchemy框架使用入门
Apr 29 Python
python 中random模块的常用方法总结
Jul 08 Python
Python实现PS图像抽象画风效果的方法
Jan 23 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
Python绘制KS曲线的实现方法
Aug 13 Python
我就是这样学习Python中的列表
Jun 02 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
浅析Python迭代器的高级用法
Jul 16 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
Python编写冷笑话生成器
Apr 20 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开发工具及资源收藏
2007/01/02 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
javascript事件委托的方式绑定详解
2015/06/10 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
python 图片验证码代码分享
2012/07/04 Python
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
python 自动批量打开网页的示例
2019/02/21 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
python文字转语音的实例代码分析
2019/11/12 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
兴趣小组活动总结
2014/05/05 职场文书
行政诉讼答辩状
2015/05/21 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers