問題描述:
1)n個人,編號為0~n-1;2)從0開始報數,報至m-1的退出;3)剩下的人繼續從0開始報數;4)求最後的勝利者。
解法:第一次報數:退出者編號為(m-1)%n
記k=m%n,通過對剩下的人重新編碼轉換為原先相同的子問題。若已知子問題的解為x則原問題的解為(x+m)%n,對映推導x ->(x+k)%n <=> (x+m%n)%n <=> (x+m)%n
k -> 0
k+1 -> 1
k+2 -> 2
...k-2 -> n-2
即遞推公式為:
f(m,1) = 0
f(m,n) = (f(m,n-1)+m)%n, n>1
**:
def josephus(m, n):
if n < 1 or m < 0:
return -1
result = 0
for i in range(2, n+1):
result = (result+m)%i
return result
reference: 約瑟夫環演算法
約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。2b求解 private void myjosf int teamle...
演算法 約瑟夫環
已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍 使用 list 來模擬環結構,不被淘汰則將其加入到 list 尾部,淘汰的直接移除。需注意,以編號 k 為第乙個報數的人,需要調整其在報數正式開啟前到 list 的頭部。param n 人的總數 param k 開始報數的序號,1 k n...
作為雜記001
今天是11月4號,虎年的尾巴只剩56天了,我清楚的認識到時間的緊迫性。必須再抓緊點才能完成年底前結束 寫作的預期目標,最不濟也要完成中期報告。ic設計的理論學習還是不能放鬆的,如果說 的權重佔第一位的話,那這個事情的重要性緊接其後。下午抽空找了幾個ic設計方面的論壇,都挺不錯的,留個備份 http ...