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 05 Python
人工智能最火编程语言 Python大战Java!
Nov 13 Python
Python字符串格式化%s%d%f详解
Feb 02 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
pandas对dataFrame中某一个列的数据进行处理的方法
Jul 08 Python
完美解决python3.7 pip升级 拒绝访问问题
Jul 12 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
numpy np.newaxis 的实用分享
Nov 30 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
Python小白学习爬虫常用请求报头
Jun 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安全的URL字符串base64编码和解码
2014/06/19 PHP
php定时执行任务设置详解
2015/02/06 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
iOS10推送通知开发教程
2016/09/19 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python MySQLdb Linux下安装笔记
2015/05/09 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
python 一维二维插值实例
2020/04/22 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
体育教育毕业生自荐信
2013/11/21 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
师德师风事迹材料
2014/12/20 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL