約瑟夫問題(遇三殺人)

2021-10-10 08:44:37 字數 1892 閱讀 4743

list1 =

[i for i in

range(1

,40)]

print

(list1)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
k =

0while

len(list1)

>2:

i =0while i<

len(list1)

: k +=

1if k ==3:

# 遇3殺人

list1.remove(list1[i]

) k =

0else

: i +=

1print

(list1)

[10, 25]
def

yue(x,y,z)

:# x是人數,y是遇y淘汰,z是倖存人數

list1 =

[i for i in

range(1

,x+1)]

k =0while

len(list1)

>z :

i =0while i<

len(list1)

: k +=

1if k == y:

list1.remove(list1[i]

) k =

0else

: i +=

1 result = list1

return result

def

move

(players,step)

:# 移動step前的元素到列表末尾

num = step -

1while num >0:

tmp = players.pop(0)

num = num -

1return players # 根據step做了元素的移動

defplay

(players,step,alive)

:#生成乙個列表,從[1,...,players]

list1 =

[i for i in

range(1

,players+1)

]#進入遊戲的迴圈,每次數到step淘汰,step之前的元素移動到列表末尾

#遊戲結束的條件:列表剩餘人數小於alive

# 移動step前的元素到列表末尾

while

len(list1)

>alive:

list1 = move(list1,step)

list1.pop(0)

return list1

players_num =

int(

input

("請輸入參加遊戲的人數"))

step_num =

int(

input

("請輸入淘汰的數字"))

alive_num =

int(

input

("請輸入倖存人數"))

alive_list = play(players_num,step_num,alive_num)

print

(alive_list)

殺人遊戲 約瑟夫問題

沒有查閱資料,硬想的,有點死板的演算法。工具用arraylist 每一次遍歷整個佇列,計算出總共被殺的人的所有位置,將計算出的位置的所有值設為0 然後將值為零的一次性刪除 arraylist.remove 0 直到佇列的長度為1。需要注意的是 只能一次性刪除遍歷整個一輪後的佇列位置,因為arrayl...

陣列(列表)實現約瑟夫殺人環

題目內容 n個人圍成一圈,從第乙個人開始順序報號1,2,3.凡報到3者退出圈子。找出最後留在圈子裡的人原來的序號。要求用陣列實現。python count 0 從0號開始 killpeoplejiange 2 每隔2個殺乙個人 每3個殺乙個 people 0,1,2,3,4,5,6,7,8,9 定義...

數論三 約瑟夫問題

描述 小hi和小ho的班級正在進行班長的選舉,他們決定通過一種特殊的方式來選擇班長。首先n個候選人圍成乙個圈,依次編號為0.n 1。然後隨機抽選乙個數k,並0號候選人開始按從1到k的順序依次報數,n 1號候選人報數之後,又再次從0開始。當有人報到k時,這個人被淘汰,從圈裡出去。下乙個人從1開始重新報...