約瑟夫(呼叫函式版)

2021-10-11 03:48:37 字數 1005 閱讀 1155

def

move

(players,step)

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

defplay

(players,step,alive)

:"""

input:

players:參加遊戲的人數

step:數到step數字的人數淘汰;

alive:倖存人數,即遊戲結束。

output:

返回乙個列表,列表中的元素為倖存者的編號

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

list1=

[i for i in

range(1

,players+1)

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

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

while

len(list1)

>alive:

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

num=step-

1while num>0:

tmp=list1.pop(0)

num=num-

1 list1=move(list1,step)

list1.pop(0)

#將如何step的元素從列表中刪除

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)

約瑟夫問題公升級版

編號為1 n的n個人按順時針方向圍坐一圈,每人持有乙個密碼 正整數,可以自由輸入 開始人選乙個正整數作為報數上限值m,從第乙個人按順時針方向自1開始順序報數,報道m時停止報數。報m的人出列,將他的密碼作為新的m值,從他順時針方向上的下乙個人開始從1報數,如此下去,直至所有人全部出列為止。includ...

約瑟夫環加強版

include include typedef struct node node node creat int n s next head next free head return s next void main printf n d號淘汰 p next data temp p next 應刪除...

約瑟夫環公升級版

題目 問題分析 和約瑟夫問題不同的是,公升級版多了乙個密碼,這個密碼可以從線性表匯入,也就是在建立結點時,有三個區域密碼域password 資料域位置position 指標域next。如下圖所示 實現 import ds01.動態陣列.arraylist 約瑟夫環公升級版 public class ...