python解决约瑟夫问题_Python实现约瑟夫环问题的方法
本文实例讲述了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实现约瑟夫环问题的方法相关推荐
- python实时监控文件大小_python实现实时监控文件的方法
在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和 ...
- python 接收外部参数_python 接收处理外带的参数方法
python 接收处理外带的参数方法 在执行python 代码的时候,有时候需要传递外面的参数进行处理 这个该怎么实现呢? 需要一个模块 from sys import argv 当然也可以直接只导入 ...
- python字符串驼峰转换_python字符串转成驼峰的方法
https://github.com/qiwsir/algorithm/blob/master/string_to_hump.md 请写一个字符串转成驼峰的方法? 请写一个字符串转成驼峰的方法? 例如 ...
- python list元素合并_python list 合并连接字符串的方法
python list 合并连接字符串的方法 更新时间:2013年03月09日 22:02:18 作者: python 列表合并字符串,我们一般会用到字符串的join方法来操作.下面通过代码的形式,详 ...
- python整数格式化表达式_Python字符串格式化表达式和格式化方法
Python格式化字符串由两种方式可以选择:一种是格式化表达式(Formatting Expression),一种是格式化方法(Formatting Method).其中格式化表达式在全Python版 ...
- python加密与解密_Python字符串加密与解密的方法总结
python对字符串做加密解密处理,大致有三种方法:base64,win32com.client和自定义加密解密算法,最安全可靠的方式,建议是自写加密解密算法. 1,使用base64: 代码示例: # ...
- python网站开发换行_python实现换行写代码的方法
python实现换行写代码的方法 发布时间:2020-07-02 16:34:06 来源:亿速云 阅读:257 这篇文章运用简单易懂的例子给大家介绍python实现换行写代码的方法,代码非常详细,感兴 ...
- python 解决最佳方案_python使用列表的最佳方案
python使用列表的最佳方案,列表,方式,方法,函数,表达式 python使用列表的最佳方案 易采站长站,站长之家为您整理了python使用列表的最佳方案的相关内容. 经常写Python程序的人,列 ...
- 用python解决生活问题_Python解决生活问题之闹钟程序的实现
昨天下班回家忘了带手机充电器,手机熄火没闹钟了,可现实是迟到30分钟以内要罚100RMB,超过30分钟算旷工要扣除3天工资,想想这代价,好吧,还是自己动手写一个闹钟程序吧! 系统环境: Linux M ...
最新文章
- C#线程系列(3):线程池和文件下载服务器
- 【c++】23.【函数指针】定义? 为什么不直接调用函数而要使用函数指针?
- 输变电设备物联网节点设备无线组网协议_SmartModule物联网智能测控组件
- 一劳永逸:域名支持通配符,ASP.NET Core中配置CORS
- 2011年计算机基础知识试卷,2011年计算机一级考试理论试题:第六部分多选题
- [JSOI2008]Blue Mary的战役地图
- 系出名门Android(9) - 数据库支持(SQLite), 内容提供器(ContentProvider)
- 英语六级修炼记录(不定时更新)
- smartadmin_smartadmin官网_smartadmin下载 bootstrap 后台模板 下载-很不错的后台模板
- word文字上下间距怎么调_word表格中怎么调整文字行间距以及字符间距
- MySQL讲义第 53 讲——select 查询之 select 语句执行过程分析
- [转]一个中高级PHP工程师所应该具备的能力
- PayPal社交游戏及移动娱乐产业的海外商机
- 跨世代保留精英遗传(基因)算法(intergenerational reserved Elitism Genetic Algorithm)
- 设置计算机ip地址时网关的作用是什么,IP地址小课堂:起到门户作用的网关到底有多重要?...
- 我国第三方支付行业市场现状和发展趋势(三)
- 陈松松:视频营销老司机,教你6步轻松剪辑视频
- C++ 内容基础知识
- http://blog.csdn.net/hguisu/article/details/8836819
- 华为--配置本地环回接口地址
热门文章
- java verbose gc_jvm参数-verbose:gc和-XX:+PrintGC有区别?
- Python爬虫的终极必杀绝技
- 前端各阶段资源,学得完算我输
- 【mybatis】在mybatis分页查询时,主表对关联表 一对多 分页查询怎么实现
- 4.4 I/O性能侦测
- Java_数据交换_Jackson_用法入门
- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
- linux增加自定义path和manpath
- Nokia是否还有未来 - 小议诺基亚和微软的战略布局
- 28天打造专业红客(一)