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 22 Python
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
requests和lxml实现爬虫的方法
Jun 11 Python
python分治法求二维数组局部峰值方法
Apr 03 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
Jun 25 Python
python实现动态创建类的方法分析
Jun 25 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
构建高效的python requests长连接池详解
May 02 Python
Python基于numpy模块实现回归预测
May 14 Python
python3代码中实现加法重载的实例
Dec 03 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 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
解析dedeCMS验证码的实现代码
2013/06/07 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
浅析VUE防抖与节流
2020/11/24 Vue.js
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
简单了解django orm中介模型
2019/07/30 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
创先争优承诺书
2015/01/20 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python
python中取整数的几种方法
2021/11/07 Python
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏