1. 程式人生 > 其它 >python-約瑟夫環

python-約瑟夫環

'''
問題描述:N個人圍成一圈,從第一個人開始報數,報到m的人出圈,剩下的人繼續從1開始報數,報到m的人出圈;如此往復,直到所有人出圈。(模擬此過程,輸出出圈的人的序號)
解決方案:這道題涉及到的演算法叫做約瑟夫演算法,需要將列表內所有數類似排列成一個圈來解決,需要將前一次刪除後剩下的元素的索引不變,但是位置鑲嵌提,無限迴圈這個圈,直到刪除到只剩一個
這道題的關鍵在於如何將每個數的索引數字固定,在刪除前一個數字後,後面的數字都應該在排序中加一。所以我們需要建立一個列表,從1開始含有位數的數字,代表每個數字的索引列表
'''
 1 def josephus(n,k):
 2     # n代表總人數,K代表報數的數字
3 List = list(range(1,n+1)) 4 index = 0 5 while List: 6 temp = List.pop(0) 7 index += 1 8 if index == k: 9 index = 0 10 continue 11 List.append(temp) 12 if len(List) == 1: 13 print(List) 14 break 15
if __name__ == '__main__': 16 josephus(10,3)