0,1,2,3,…,n-1這n個數排成乙個圈,從數字0開始,每次在圓圈裡面剔除第m個數字。求出這個圓圈最後乙個數字。
乙個是使用鍊錶來模擬這個過程
使用公式推導
鍊錶模擬:
int
lastremaining_solution
(int n,
int m)
else
}return
*peoples.
begin()
;}
公式推導:
假設 m= 3a遞迴**:* f(1) = 0
* f(2) = 1 = (f(1) + 3) % 2
* f(3) = 1 = (f(2) + 3) % 3
* f(4) = 0 = (f(3) + 3) % 4
* f(5) = 3 = (f(4) + 3) % 5
* …* f(n) = x = (f(n-1) + 3) % n
int
lastremaining_solution_2
(int n,
int m)
b非遞迴**
int
lastremaining_solution_1
(int n,
int m)
C 之約瑟夫環
問題原型 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有人都自殺身亡為止。然而josephus 和...
PHP坑之 約瑟夫環
約瑟夫環 問題 一群猴子排成一圈,按1,2,n依次編號。然後從第一只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,再把它踢出去 如此不停的進行下去,直到最後只剩下乙隻猴子為止,那只猴子就叫做大王。要求 輸入m,n,輸出最後的那個大王的編號。遞迴演算法 function killmo...
經典演算法之約瑟夫環問題
前幾天看到乙個程式設計題,約瑟夫環問題。問題的由來是乙個猶太故事,41乙個人被困,有39個人想要自殺,想活下去的兩個人就出主意說,大家圍成乙個環,報到3的人自殺。結果兩個人成功脫險,也就誕生了這個演算法。由於本人實力有限,寫出的程式也並未進行優化,可能時間複雜度和空間複雜度上有很多問題,只希望給各位...