本文实例讲述了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实现约瑟夫环问题的方法

本文地址: http://www.cppcns.com/jiaoben/python/149061.html

python中约瑟夫环程序_Python实现约瑟夫环问题的方法相关推荐

  1. python中str是什么_python的str()字符串类型的方法详解

    字符串一旦创建,不可修改,一旦修改或者拼接,都会造成重新生成字符串,因为内存存数据是一个挨着一个存的,如果增加一个字符串的话,之前的老位置只有一个地方,不够,这是原理性的东西,在其他语言里面也一样 7 ...

  2. python中常见的漏洞_Python常见安全漏洞及修复方法集合!你所不会的这里都有!...

    [51CTO技术沙龙]10月27日,让我们共同探索AI场景化应用实现之道 --> 概述 编写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考 ...

  3. python中怎么编写程序_python写完程序怎么运行

    安装并配置完成之后,我们就可以编写第一个python程序.学过其他语言的兄弟姐妹们,都知道语言的入门程序就是hello world.那么,我们这里也以hello world来抛砖引玉,打开python ...

  4. python中exception类的_Python自定义一个异常类的方法

    如何实现自定义一个异常 python内置了许多异常类,为编写代码划定红线,才使调试代码时能及时发现错误.那么我们编写一个模块也可以为使用此模块者划定红线,来约束使用者可用哪些数据,这就需要自定义异常类 ...

  5. python中readlines怎么用_python read() readline() readlines() write() writelines()方法总结

    open()成功执行后返回一个文件对象,以后所有对该文件的操作都可以通过这个"句柄"来进行,现在主要讨论下常用的输入以及输出操作. 输出: read()方法用于直接读取字节到字符串 ...

  6. python 获取参数模块_Python中获取启动程序时后面跟的参数的方法(optparse模块)【冰斌棒】...

    Python中获取启动程序时后面跟的参数的方法(optparse模块)[冰斌棒] 3年前 (2018-01-29)    作者:冰斌棒    分类:冰斌棒18程序计划    阅读次数:871 评论(0 ...

  7. python中用函数编写程序_python编写程序,在程序中定义一个函数,计算1+1/2+1/3+1/4+……+1/n...

    python语言编写的程序需要运行库.Python(英语发音:/?pa?θ?n/),是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于 ...

  8. python中文件描述符_Python中的描述符

    python中文件描述符 In Python, a class that implements a get, set or delete methods for an object is called ...

  9. python中isalpha的用法_Python string isalpha()用法及代码示例

    在Python中,isalpha()是用于字符串处理的内置方法.如果字符串中的所有字符都是字母,则isalpha()方法返回"True",否则,返回"False" ...

最新文章

  1. java中properties作用,java中Properties类的使用
  2. 大多数Web浏览器中都可以使用PUT,DELETE,HEAD等方法吗?
  3. poj 2240 Arbitrage (floyd 变形)
  4. angular 多个片段拼接_10个JavaScript代码片段,帮助你成为更好的开发者
  5. SQL Server DATEDIFF() 函数计算时间差
  6. 扩大博士研究生招生规模!
  7. mysql更改执行计划_11g中 connect by 语句执行计划改变
  8. 服务器安装数据库显示启动服务,安装数据库没有启动服务器服务
  9. 【Altera SoC体验之旅】+ 正式开启OpenCL模式
  10. 故宫商业大跃进 逐渐失控的IP洪流
  11. Hilbert变换器
  12. 解决Cannot find module ‘./index.module.scss‘ or its corresponding type declarations.ts(2307)
  13. Sue 的小球 ball
  14. 学校计算机机房解说词,学校会议室解说词.doc
  15. 信息系统项目管理师学习笔记1——信息化与信息系统1
  16. ActiveMQ 完整教程
  17. 用华为手机,别忘记打开这个“开发者选项”,能瞬间提升手机性能
  18. mysql 增加字段
  19. android r AB ota fail
  20. open与fopen

热门文章

  1. ttc转换ttf字体在线_R 语言画图中英文字体解决方案
  2. pythonbyte连接_Python3之字节串bytes与字节数组bytearray的使用详解
  3. MonoRec:无需激光雷达,只需单个相机就可以实现三维场景的稠密重建
  4. 使用c++filt查看trafficserver堆栈调用信息
  5. 为方便ATS管理建立的一些命令别名
  6. 三维植物树木模型 Maxtree – Plant Models Vol 74
  7. 用Sketchup和Vray学习室内设计
  8. jmeter分析性能报告时的误区
  9. 上不了名校?可以在 GitHub 上读他们的课程
  10. Android开发教程 - 使用Data Binding(二)集成与配置