Python實現(xiàn)約瑟夫環(huán)問題的方法
本文實例講述了Python實現(xiàn)約瑟夫環(huán)問題的方法。分享給大家供大家參考,具體如下:
題目:0,1,...,n-1這n個數(shù)字排成一個圓圈,從數(shù)字0開始每次從這個圓圈里刪除第m個數(shù)字。求出這個圓圈里剩下的最后一個數(shù)字。
定義函數(shù)f(n,m),表示每次在n個數(shù)字(0,1,...,n-1)中每次刪除第m個數(shù)字后最后剩下的數(shù)字。
在n個數(shù)字中,假設(shè)第一個被刪除的數(shù)字為k,那么刪除k之后剩下的n-1個數(shù)字為0~k-1,k 1~n-1,并且下一次刪除從數(shù)字k 1開始計數(shù)。第二個序列最后剩下的數(shù)字也就是我們要求的數(shù)字。于是我們對于剩下的n-1個數(shù)字重新編號,k 1編號為0,k 2編號為1,...,0編號為n-k-1,1編號為n-k,k-1編號為n-2,假設(shè)f(n-1, m) = x,即n-1個數(shù)中,每次刪除第m個,最后剩下的數(shù)字編號為x,那么這個x就對應(yīng)著原序列(n個數(shù))中的編號(x + m) % n??梢缘玫竭f推關(guā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個數(shù)字排成一個圓圈,從數(shù)字0開始每次從這個圓圈里刪除第m個數(shù)字。求出這個圓圈里剩下的最后一個數(shù)字。 ''' 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)
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python正則表達式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
Matlab中的mat數(shù)據(jù)轉(zhuǎn)成python中使用的npy數(shù)據(jù)遇到的坑及解決
這篇文章主要介紹了Matlab中的mat數(shù)據(jù)轉(zhuǎn)成python中使用的npy數(shù)據(jù)遇到的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12關(guān)于Python如何避免循環(huán)導(dǎo)入問題詳解
在大型的Python工程中,由于架構(gòu)設(shè)計不當(dāng),可能會出現(xiàn)模塊間相互引用的情況。下面這篇文章主要給大家介紹了關(guān)于如何避免Python的循環(huán)導(dǎo)入問題的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09python使用Psutil模塊實現(xiàn)獲取計算機相關(guān)信息
psutil 是一個跨平臺的庫,用于獲取進程和系統(tǒng)運行狀態(tài)的信息,這篇文章主要為大家詳細介紹了python如何調(diào)用psutil模塊實現(xiàn)獲取計算機相關(guān)信息,有需要的小伙伴可以了解下2023-11-11解決運行django程序出錯問題 ''str''object has no attribute''_meta''
這篇文章主要介紹了解決運行django程序出錯問題 'str'object has no attribute'_meta',具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07Python OpenCV 圖像區(qū)域輪廓標(biāo)記(框選各種小紙條)
這篇文章主要介紹了Python OpenCV 圖像區(qū)域輪廓標(biāo)記(框選各種小紙條),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03