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的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
python实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
Python Django基础二之URL路由系统
Jul 18 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
postman和python mock测试过程图解
Feb 22 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
使用python操作lmdb对数据读取的实例
Dec 11 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
python实现简易自习室座位预约系统
Jun 30 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
Mysql的常用命令
2006/10/09 PHP
php str_pad 函数用法简介
2009/07/11 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
PHP实现获取域名的方法小结
2014/11/05 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
护士毕业生自荐信
2014/02/07 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
Go timer如何调度
2021/06/09 Golang
Go语言基础知识点介绍
2021/07/04 Golang
golang 语言中错误处理机制
2021/08/30 Golang