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实现协同过滤的教程
Apr 08 Python
python通过函数属性实现全局变量的方法
May 16 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
Python从使用线程到使用async/await的深入讲解
Sep 16 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
python实现数据分析与建模
Jul 11 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
matplotlib相关系统目录获取方式小结
Feb 03 Python
python tkinter模块的简单使用
Apr 07 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 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
GD输出汉字的函数的分析
2006/10/09 PHP
人大复印资料处理程序_查询篇
2006/10/09 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
php中JSON的使用方法
2015/04/30 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
jquery复选框全选/取消示例
2013/12/30 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
详解Javascript模板引擎mustache.js
2016/01/20 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
Python采用raw_input读取输入值的方法
2014/08/18 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
大学军训通讯稿
2014/01/13 职场文书
迟到早退检讨书
2014/02/10 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
设计师求职信
2014/07/01 职场文书
十八大标语口号
2014/10/09 职场文书
瘦西湖导游词
2015/02/03 职场文书
党员年度个人总结
2015/02/14 职场文书
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android