Python——約瑟夫生者死者小遊戲

問題描述:

30 個人在一條船上,超載,需要 15 人下船。於是人們排成一隊,排隊的位置即爲他們的編號。

報數,從 1 開始,數到 9 的人下船。如此循環,直到船上僅剩 15 人爲止,問都有哪些編號的人下船了呢?

解決思路:

給30個人編號1-30,每個人的初值都是1(在船上),i代表他們的編號,j代表被扔下船的人數(j=15時循環結束),用check記數,check=9時將對應編號i的人置0(扔下船)並讓check重新記數。

當i等於31時,手動將i置爲1

當對應編號i的人值爲0時,代表此人已經不在船上,i+1找到下一個人記數,以此類推。

代碼實現:

people={}
#此處for循環會輸出{1: 1, 2: 1, 3: 1, ..., 30: 1},相當於給30個人都賦初始值1
for x in range(1,31):
    people[x]=1
# print(people)
#check記數,0-9;i爲人們的編號,1-30;j爲下船的人數
check=0
i=1
j=0
while i<=31:
    #因爲只有30人,當i等於31時,手動將i置爲1
    if i == 31:
        i=1
    #下船15人後退出循環
    elif j == 15:
        break
    else:
        #people[i]爲0時,表示此人已下船,i加1,check不增加,繼續循環
        if people[i] == 0:
            i+=1
            continue
        else:
            check += 1
            # i=1,check=1,...i=9,check=9
            if check == 9:
                #數到9的人的值設爲0(下船),check置0,重新開始計數
                people[i]=0
                check = 0
                print("{}號下船了".format(i))
                #j爲下船的人數,下一個人j加1
                j+=1
            else:
                i+=1
                continue

結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章