国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現約瑟夫環問題的方法

2020-01-04 17:30:05
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了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) % nif __name__ == '__main__':  print josephus(8, 3)  print josephus(1, 2)  print josephus(0, 2)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰顺县| 旺苍县| 红原县| 襄垣县| 尼勒克县| 嘉义县| 元氏县| 博白县| 榆林市| 天祝| 东港市| 江源县| 黑山县| 固安县| 亚东县| 纳雍县| 雷州市| 疏勒县| 旅游| 溧水县| 玉屏| 龙井市| 秦安县| 利辛县| 枣阳市| 邛崃市| 资兴市| 潮安县| 开江县| 南岸区| 建阳市| 鄂伦春自治旗| 日土县| 锡林浩特市| 曲阳县| 乐陵市| 汉寿县| 井研县| 许昌市| 邵阳市| 海丰县|