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開始重新報...