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 with statement 进行文件操作指南
Aug 22 Python
Python下的subprocess模块的入门指引
Apr 16 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
Python使用try except处理程序异常的三种常用方法分析
Sep 05 Python
对Python 检查文件名是否规范的实例详解
Jun 10 Python
详解解决Python memory error的问题(四种解决方案)
Aug 08 Python
30秒学会30个超实用Python代码片段【收藏版】
Oct 15 Python
python 项目目录结构设置
Feb 14 Python
Django models filter筛选条件详解
Mar 16 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
8种常用的Python工具
Aug 05 Python
python实现控制台输出颜色
Mar 02 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实现读取和编写XML DOM代码
2010/04/07 PHP
php数组中包含中文的排序方法
2014/06/03 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
Javascript 布尔型分析
2008/12/22 Javascript
15 个 JavaScript Web UI 库
2010/05/19 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
百度地图api如何使用
2015/08/03 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
基于vue2.0实现的级联选择器
2017/06/09 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
python的sorted用法详解
2019/06/25 Python
python交易记录整合交易类详解
2019/07/03 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
Python 存取npy格式数据实例
2020/07/01 Python
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
见习期自我鉴定
2013/11/07 职场文书
创业计划书六个要素
2013/12/26 职场文书
收银员岗位职责
2014/02/07 职场文书
数控专业自荐书范文
2014/03/16 职场文书
化工工艺设计求职信
2014/06/25 职场文书
党员批评与自我批评
2014/10/15 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript
SQL Server内存机制浅探
2022/04/06 SQL Server