本文实例讲述了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程序设计有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

相关文章

相关视频

python解决约瑟夫问题_Python实现约瑟夫环问题的方法相关推荐

  1. python实时监控文件大小_python实现实时监控文件的方法

    在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和 ...

  2. python 接收外部参数_python 接收处理外带的参数方法

    python 接收处理外带的参数方法 在执行python 代码的时候,有时候需要传递外面的参数进行处理 这个该怎么实现呢? 需要一个模块 from sys import argv 当然也可以直接只导入 ...

  3. python字符串驼峰转换_python字符串转成驼峰的方法

    https://github.com/qiwsir/algorithm/blob/master/string_to_hump.md 请写一个字符串转成驼峰的方法? 请写一个字符串转成驼峰的方法? 例如 ...

  4. python list元素合并_python list 合并连接字符串的方法

    python list 合并连接字符串的方法 更新时间:2013年03月09日 22:02:18 作者: python 列表合并字符串,我们一般会用到字符串的join方法来操作.下面通过代码的形式,详 ...

  5. python整数格式化表达式_Python字符串格式化表达式和格式化方法

    Python格式化字符串由两种方式可以选择:一种是格式化表达式(Formatting Expression),一种是格式化方法(Formatting Method).其中格式化表达式在全Python版 ...

  6. python加密与解密_Python字符串加密与解密的方法总结

    python对字符串做加密解密处理,大致有三种方法:base64,win32com.client和自定义加密解密算法,最安全可靠的方式,建议是自写加密解密算法. 1,使用base64: 代码示例: # ...

  7. python网站开发换行_python实现换行写代码的方法

    python实现换行写代码的方法 发布时间:2020-07-02 16:34:06 来源:亿速云 阅读:257 这篇文章运用简单易懂的例子给大家介绍python实现换行写代码的方法,代码非常详细,感兴 ...

  8. python 解决最佳方案_python使用列表的最佳方案

    python使用列表的最佳方案,列表,方式,方法,函数,表达式 python使用列表的最佳方案 易采站长站,站长之家为您整理了python使用列表的最佳方案的相关内容. 经常写Python程序的人,列 ...

  9. 用python解决生活问题_Python解决生活问题之闹钟程序的实现

    昨天下班回家忘了带手机充电器,手机熄火没闹钟了,可现实是迟到30分钟以内要罚100RMB,超过30分钟算旷工要扣除3天工资,想想这代价,好吧,还是自己动手写一个闹钟程序吧! 系统环境: Linux M ...

最新文章

  1. C#线程系列(3):线程池和文件下载服务器
  2. 【c++】23.【函数指针】定义? 为什么不直接调用函数而要使用函数指针?
  3. 输变电设备物联网节点设备无线组网协议_SmartModule物联网智能测控组件
  4. 一劳永逸:域名支持通配符,ASP.NET Core中配置CORS
  5. 2011年计算机基础知识试卷,2011年计算机一级考试理论试题:第六部分多选题
  6. [JSOI2008]Blue Mary的战役地图
  7. 系出名门Android(9) - 数据库支持(SQLite), 内容提供器(ContentProvider)
  8. 英语六级修炼记录(不定时更新)
  9. smartadmin_smartadmin官网_smartadmin下载 bootstrap 后台模板 下载-很不错的后台模板
  10. word文字上下间距怎么调_word表格中怎么调整文字行间距以及字符间距
  11. MySQL讲义第 53 讲——select 查询之 select 语句执行过程分析
  12. [转]一个中高级PHP工程师所应该具备的能力
  13. PayPal社交游戏及移动娱乐产业的海外商机
  14. 跨世代保留精英遗传(基因)算法(intergenerational reserved Elitism Genetic Algorithm)
  15. 设置计算机ip地址时网关的作用是什么,IP地址小课堂:起到门户作用的网关到底有多重要?...
  16. 我国第三方支付行业市场现状和发展趋势(三)
  17. 陈松松:视频营销老司机,教你6步轻松剪辑视频
  18. C++ 内容基础知识
  19. http://blog.csdn.net/hguisu/article/details/8836819
  20. 华为--配置本地环回接口地址

热门文章

  1. java verbose gc_jvm参数-verbose:gc和-XX:+PrintGC有区别?
  2. Python爬虫的终极必杀绝技
  3. 前端各阶段资源,学得完算我输
  4. 【mybatis】在mybatis分页查询时,主表对关联表 一对多 分页查询怎么实现
  5. 4.4 I/O性能侦测
  6. Java_数据交换_Jackson_用法入门
  7. Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
  8. linux增加自定义path和manpath
  9. Nokia是否还有未来 - 小议诺基亚和微软的战略布局
  10. 28天打造专业红客(一)