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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM