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实现zencart产品数据导入到magento(python导入数据)
Apr 03 Python
wxPython学习之主框架实例
Sep 28 Python
Python切片知识解析
Mar 06 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
python 实现对文件夹内的文件排序编号
Apr 12 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
python+pyqt5编写md5生成器
Mar 18 Python
python 列表转为字典的两个小方法(小结)
Jun 28 Python
python自动循环定时开关机(非重启)测试
Aug 26 Python
python系列 文件操作的代码
Oct 06 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 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
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
axios post提交formdata的实例
2018/03/16 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
python中pygame模块用法实例
2014/10/09 Python
python+opencv实现动态物体识别
2018/01/09 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
基于python实现名片管理系统
2018/11/30 Python
人工神经网络算法知识点总结
2019/06/11 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
什么是Python中的匿名函数
2020/06/02 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
护理专业本科生自荐信
2013/10/01 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
让世界充满爱观后感
2015/06/10 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书