Python实现约瑟夫环问题的方法

 更新时间:2016年05月03日 11:46:44   作者:阿涵-_-  
这篇文章主要介绍了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程序设计有所帮助。

相关文章

  • Python 多核并行计算的示例代码

    Python 多核并行计算的示例代码

    本篇文章主要介绍了Python 多核并行计算的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • python并发爬虫实用工具tomorrow实用解析

    python并发爬虫实用工具tomorrow实用解析

    这篇文章主要介绍了python并发爬虫实用工具tomorrow实用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python中Django的ORM高级用法

    Python中Django的ORM高级用法

    这篇文章主要介绍了Python中Django的ORM高级用法,ORM是一种思想,ORM对象-关系映射,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统,需要的朋友可以参考下
    2023-07-07
  • 理解python多线程(python多线程简明教程)

    理解python多线程(python多线程简明教程)

    这篇文章主要介绍了理解python多线程,一个快速理解python多线程的简明教程,需要的朋友可以参考下
    2014-06-06
  • python3.6使用tkinter实现弹跳小球游戏

    python3.6使用tkinter实现弹跳小球游戏

    这篇文章主要为大家详细介绍了python3.6使用tkinter实现弹跳小球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Python二进制转化为十进制数学算法详解

    Python二进制转化为十进制数学算法详解

    这篇文章主要介绍了Python二进制转化为十进制数学算法,同时在这里也给大家分享一个好用的内置函数map(),需要的朋友可以参考下
    2023-01-01
  • Pandas中的空字符串(非缺失值)处理方式

    Pandas中的空字符串(非缺失值)处理方式

    这篇文章主要介绍了Pandas中的空字符串(非缺失值)处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python神经网络TensorFlow基于CNN卷积识别手写数字

    Python神经网络TensorFlow基于CNN卷积识别手写数字

    这篇文章主要介绍了Python神经网络TensorFlow基于CNN卷积识别手写数字的实现示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • Win下PyInstaller 安装和使用教程

    Win下PyInstaller 安装和使用教程

    pyinstaller是一个非常简单的打包python的py文件的库,这篇文章主要介绍了PyInstaller-Win安装和使用教程,本文通过流程实例相结合给大家介绍的非常详细,需要的朋友可以参考下
    2019-12-12
  • PyCharm设置中文(汉化与解除汉化)的方法

    PyCharm设置中文(汉化与解除汉化)的方法

    这篇文章介绍了PyCharm设置中文(汉化与解除汉化)的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论