用Python實現約瑟夫環演算法

pythontab發表於2019-06-11

面試的過程中遇到了這個問題。就是經典的約瑟夫環。總共有41個人,排成一排,數到3的人自殺,問最後剩下的是那兩個號碼?


這個題目最早是用指標實現的。在我面試python的過程中遇到了,我嫌麻煩,所以只寫了虛擬碼。後來想來一下,這樣實在是表現太差勁啊。python是很方便的,為什麼非要用指標去實現呢,這也表現出我對語言的實用不熟練吧。這也是我面試過程中表現最突出的問題。好吧,分析一下,其實很簡單,就是數數,只不過死去的人不參與計數。只需要建一個死人的list,然後在從活人的list中迴圈數,知道剩下2個人,就是輸出結果。下面是實現過程。


import os
cnt = 1
dead = []
 
def ans(t):
    global cnt,dead
    for i in t:
        if i in dead:
            continue
        if cnt==3:
            dead.append(i)
            print dead
            cnt = 1
        else:
            cnt+=1
 
if __name__=='__main__':
    s = 9
    p = range(1,s,1)
    while len(dead)<s - 3:
        ans(p)
    for i in p:
        if i not in dead:
            print(i)


其實用python 還是很容易實現的,比寫c的連結串列不知道簡單了多少倍。除非你想練習一下 連結串列。


相關文章