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使用Bottle来提供一个简单的web服务
Dec 27 Python
Python异常处理操作实例详解
Aug 28 Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
基于python 取余问题(%)详解
Jun 03 Python
Django之腾讯云短信的实现
Jun 12 Python
Python使用xlrd实现读取合并单元格
Jul 09 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
Python使用grequests并发发送请求的示例
Nov 05 Python
python unichr函数知识点总结
Dec 16 Python
用python批量下载apk
Dec 29 Python
利用python Pandas实现批量拆分Excel与合并Excel
May 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
杏林同学录(三)
2006/10/09 PHP
php smarty的预保留变量总结
2008/12/04 PHP
php GeoIP的使用教程
2011/03/09 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
js中style.display=&quot;&quot;无效的解决方法
2014/10/30 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
python实现端口转发器的方法
2015/03/13 Python
发布你的Python模块详解
2016/09/15 Python
Python实现的科学计算器功能示例
2017/08/04 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
Django 反向生成url实例详解
2019/07/30 Python
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
大学毕业生通用求职信
2013/09/28 职场文书
校园自助餐厅的创业计划书
2013/12/26 职场文书
社区八一活动方案
2014/02/03 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
转让协议书
2015/01/27 职场文书
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis