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

作者:阿涵-_- 时间:2021-09-07 19:41:28 

本文实例讲述了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,约瑟夫环
0
投稿

猜你喜欢

  • 怎么样才能抓住用户?

    2008-10-20 12:10:00
  • SQL 中主标识列IDENTITY使用技巧

    2011-06-02 08:47:00
  • 用层模拟下拉列表框

    2013-07-01 01:19:00
  • 如何把数组转换成字符串?

    2009-11-06 13:49:00
  • django框架model orM使用字典作为参数,保存数据的方法分析

    2021-03-11 00:18:30
  • 抛砖:如何进行互联网项目开发

    2010-01-25 12:25:00
  • thinkPHP中配置的读取与C方法详解

    2023-11-14 17:12:35
  • XML+ JS创建树形菜单

    2013-08-22 08:30:17
  • asp超强的Server Application Error 的解决方法

    2008-11-13 13:04:00
  • 详尽解析javascript的event对象

    2008-01-16 11:27:00
  • python2.7读取文件夹下所有文件名称及内容的方法

    2023-12-16 03:27:07
  • 一文带你搞懂Python中的文件操作

    2023-07-20 14:00:52
  • CSS模块化设计

    2009-01-05 12:10:00
  • 如何绝对获知浏览器类型?

    2009-12-16 18:58:00
  • HTML5 Canvas 起步(1) - 基本概念

    2009-04-21 13:14:00
  • php实现pdo数据库操作类过程详解

    2023-05-25 11:15:05
  • SQL参数化查询的另一个理由 命中执行计划

    2012-08-21 10:31:16
  • SQL Server如何才能访问Sybase中的表

    2009-01-08 13:33:00
  • 同时安装sql2000和sql2005,经验点滴

    2008-03-04 17:56:00
  • python pip源配置,pip配置文件存放位置的方法

    2023-01-25 09:51:46
  • asp之家 网络编程 m.aspxhome.com