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实现带声音的摩斯码翻译实现方法
May 20 Python
Python Socket传输文件示例
Jan 16 Python
python中map()函数的使用方法示例
Sep 29 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
在Pycharm中自动添加时间日期作者等信息的方法
Jan 16 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
下载官网python并安装的步骤详解
Oct 12 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
Python之字典添加元素的几种方法
Sep 30 Python
Numpy数组的广播机制的实现
Nov 03 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将任何格式视频转为flv的代码
2009/09/03 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
Django shell调试models输出的SQL语句方法
2019/08/29 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
美国家具网站:Cymax
2016/09/17 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
Linux操作面试题
2012/05/16 面试题
优秀小学生家长评语
2014/01/30 职场文书
教师个人自我评价范文
2014/04/13 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python