您的位置:首頁>正文

經典演算法之猴王

說起“猴王”問題, 大家可能都遇到過, 問題的描述如下:

n只猴子圍坐成一個圈, 按順時針方向從1到n編號。

然後從1只猴子開始沿順時針方向從1開始報數,

報到m的猴子出局, 然後從剛出局猴子的下一位重新開始報數

如此重複, 直至剩下一個猴子, 它就是大王!

其實這個問題考察的是“約瑟夫環”演算法的, 約瑟夫環百科中的介紹如下:

約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1, 2, 3...n分別表示)圍坐在一張圓桌周圍。 從編號為k的人開始報數, 數到m的那個人出列;他的下一個人又從1開始報數, 數到m的那個人又出列;依此規律重複下去, 直到圓桌周圍的人全部出列。 通常解決這類問題時我們把編號從0~n-1, 最後 結果+1即為原問題的解。

不說那麼多了, 直接來上程式吧( PHP )

演算法1

思路:通過陣列方式, 將數到的位不是結束, 把這一位元放到陣列末尾, 並消掉這個位

演算法2

使用經典演算法:約瑟夫環

約瑟夫遞推公式如下:

F[1] = 0 ;

F[i] = ( F[i-1] + m ) % i ; ( i > 1 )

想詳細的了解約瑟夫環遞推原理的, 請回復一下, 後續會整理一下遞推的過程, 以便於詳細的瞭解下!

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示