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命令行参数解析模块getopt使用实例
Apr 13 Python
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 Python
python用插值法绘制平滑曲线
Feb 19 Python
Python 3.8 新功能全解
Jul 25 Python
elasticsearch python 查询的两种方法
Aug 04 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
PyTorch笔记之scatter()函数的使用
Feb 12 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
解决Python 函数声明先后顺序出现的问题
Sep 02 Python
Django框架模板用法详解
Jun 10 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者的疑难问答(2)
2006/10/09 PHP
PHP _construct()函数讲解
2019/02/03 PHP
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
简单的编程0基础下Python入门指引
2015/04/01 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
Python实现爬取并分析电商评论
2020/06/19 Python
python openssl模块安装及用法
2020/12/06 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
高中生期末评语
2014/01/28 职场文书
酒店秘书求职信范文
2014/02/17 职场文书
优秀员工获奖感言
2014/03/01 职场文书
旅游节目策划方案
2014/05/26 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
体育活动总结
2015/02/04 职场文书
如何写新闻稿
2015/07/18 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技