C 之約瑟夫環

2021-08-28 11:30:03 字數 799 閱讀 8939

0,1,2,3,…,n-1這n個數排成乙個圈,從數字0開始,每次在圓圈裡面剔除第m個數字。求出這個圓圈最後乙個數字。

乙個是使用鍊錶來模擬這個過程

使用公式推導

鍊錶模擬:

int

lastremaining_solution

(int n,

int m)

else

}return

*peoples.

begin()

;}

公式推導:

假設 m= 3

* 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

a遞迴**:

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的人自殺。結果兩個人成功脫險,也就誕生了這個演算法。由於本人實力有限,寫出的程式也並未進行優化,可能時間複雜度和空間複雜度上有很多問題,只希望給各位...