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脚本使得web页面上的代码高亮显示
Apr 24 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
将Python的Django框架与认证系统整合的方法
Jul 24 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
Python实现的计算马氏距离算法示例
Apr 03 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
python编辑用户登入界面的实现代码
Jul 16 Python
python用插值法绘制平滑曲线
Feb 19 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
python3实现单目标粒子群算法
Nov 14 Python
python+opencv实现车牌定位功能(实例代码)
Dec 24 Python
python 实现单例模式的5种方法
Sep 23 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
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
重命名批处理python脚本
2013/04/05 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
python实现八大排序算法(2)
2017/09/14 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
数据保密承诺书
2014/06/03 职场文书
建筑工地质量标语
2014/06/12 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
学前班学生评语
2014/12/29 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
致运动员赞词
2015/07/22 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL