“猴子選大王” 算法 python實現

ybw8 9年前發布 | 22K 次閱讀 算法 Python

今天來實現一個約瑟夫環算法,下面是一道新浪的面試題:m只猴子圍坐成一個圈,按順時針方向從1到m編號。然后從1號猴子開始沿順時針方向從1...

今天來實現一個約瑟夫環算法,下面是一道新浪的面試題:

m只猴子圍坐成一個圈,按順時針方向從1到m編號。然后從1號猴子開始沿順時針方向從1開始報數,報到n的猴子出局,再從剛出局猴子的下一個位置重新開始報數,如此重復,直至剩下一個猴子,它就是大王。設計并編寫程序,實現如下功能:

(1)要求由用戶輸入開始時的猴子數m、報數的最后一個數n。

(2)給出當選猴王的初始編號。


這道題是典型的約瑟夫環問題,“猴子選大王”問題。

注意:本實例在python2.7下測試通過,未在python3下測試,有興趣的同學可以到群里交流

直接上代碼:

#!/usr/bin/python

coding=utf-8

約瑟夫環算法 之 猴子選王 問題

def king(m,n): dd = {}

生成一個字典

p = 1
while(p<=m):
    dd[p] = p
    p = p+1

j = 1
while(len(dd) >1):
    for k,v in dd.items():
        if(j == n):
            del dd[k]
            j = 1
        else:
            j = j+1
return dd

print king(6,2)</pre>

注意:這里用到了字典,而不是list。主要是因為這樣可以利用字典的索引的優勢


</div>

 本文由用戶 ybw8 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!