欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

python的約瑟夫算法

周雨萌1年前6瀏覽0評論

約瑟夫問題最初是一段古老的故事,講述了一個圍繞圓桌的人群,每次輪到一人,順時針方向數m個人后,該人出局。最后剩下的人獲勝。在現實生活中,我們可能面對類似場景,比如說公園里玩“接力跑”,坐在圓桌前的朋友們決定用這個問題來決定誰要買晚餐。

現在,我們將使用Python編寫一個暴力求解約瑟夫問題的程序,它接受兩個參數:參與者數量n和每次循環中出局者編號m。

def josephus(n, m):
# 創建一個由n個元素的列表,每個元素代表一個參與者
circle = [i+1 for i in range(n)]
# 初始化起始索引、計數器和出局者列表
index = 0
count = 0
out = []
# 只有一人留下時結束循環,返回出局者列表
while len(circle) >1:
# 計數器加一
count += 1
# 如果計數器是m的倍數,則相應的參與者出局
if count % m == 0:
# 將出局者添加到出局者列表中
out.append(circle[index])
# 從圓圈中刪除出局者
circle.pop(index)
# 索引位置不變,因為圓圈在出局者之后縮小了
else:
# 如果計數器不是m的倍數,則繼續向前移動索引位置
index = (index + 1) % len(circle)
# 返回最后留下的參與者和出局者列表
return (circle[0], out)

在這段代碼中,我們使用了一個列表來表示參與者圓圈。在每次循環中,我們檢查當前計數器是否是m的倍數,如果是,我們將相應的參與者出局并添加到出局者列表中。在出局后,我們繼續從當前索引位置向前移動。如果計數器不是m的倍數,我們則只需將索引位置向前移動。

現在,我們可以使用josephus()函數來解決任何約瑟夫問題了。

# 解決一個100人的約瑟夫問題,每次循環數3人
winner, outlist = josephus(100, 3)
print("獲勝者是:", winner)
print("出局者列表:", outlist)

在這個例子中,我們使用了一個具有100個參與者的圓圈,每次循環從中選出3位出局。程序將返回最后剩下的獲勝者和出局者列表。