在這裡插入**片
**約瑟夫環問題的起源來自猶太歷史學家約瑟夫和他的朋友以及39其餘的猶太人,總共41人為了躲避敵人,藏在乙個山洞中,
39個猶太人決定寧願死也不被敵人抓到,於是決定自殺,所有人排成乙個圈,由第乙個人開始報數,每當數到3,就自殺。
這個遊戲接著從自殺的位置開始,還是從1數到3。依次類推,約瑟夫將朋友和自己安排在了16和31的位置,最後順利逃過了
自殺這一劫,因為最後就剩他乙個人了
python2.x 實現
因為工作地方都是用2.x
#coding = utf-8
defysf
(n,k,m)
:#一共n個人,從第k個開始,每隔m個殺掉乙個人
list
=range(1
,n+1
) l =
for x in
range(1
,n+1):
#print l
t = k -
1for i in
range
(n-1):
print
"i ="
,i t =
(t+m-1)
%len
(l)print
"殺掉的是:"
,l.pop(t)
print
"剩下的人是:"
,l print
"留下的編號:"
,str
(l)ysf(10,
1,3)
#測試
i = 0
殺掉的是: 3
剩下的人是: [1, 2, 4, 5, 6, 7, 8, 9, 10]
i = 1
殺掉的是: 6
剩下的人是: [1, 2, 4, 5, 7, 8, 9, 10]
i = 2
殺掉的是: 9
剩下的人是: [1, 2, 4, 5, 7, 8, 10]
i = 3
殺掉的是: 2
剩下的人是: [1, 4, 5, 7, 8, 10]
i = 4
殺掉的是: 7
剩下的人是: [1, 4, 5, 8, 10]
i = 5
殺掉的是: 1
剩下的人是: [4, 5, 8, 10]
i = 6
殺掉的是: 8
剩下的人是: [4, 5, 10]
i = 7
殺掉的是: 5
剩下的人是: [4, 10]
i = 8
殺掉的是: 10
剩下的人是: [4]
留下的編號: [4]
本題只需要把函式引數換成ysf(41,1,3) 就可以得到結果
約瑟夫環(python)
約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0 n 1,最後 結果 1...
python實現約瑟夫環
約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0 n 1,最後結果 1即...
python實現約瑟夫環
約瑟夫環問題的邏輯很簡單就是一群人圍成乙個圈指定從其中乙個人開始報數,指定報數到多少,報到這個數的人就出局,剩下的人從剛出局的人的位置的下乙個人繼續開始遊戲。看起來比文字描述直觀,我就直接上 了。def ysf sum,bsit,distance,survive sum總的人數,bsit報數開始的位...