問題:
假設下標從0開始,0,1,2 .. m-1共m個人,從1開始報數,報到k則此人從環出退出,問最後剩下的乙個人的編號是多少?
我的理解:
設f(m,k,i)為m個人的環,報數為k,第i個人出環的編號,m個人的環第i個出來的人就相當於m-1個人的環第i-1個出來的人,不過這個序號是相當於原來m個人的序號。但注意的是m個人的環第乙個出來的人序號要減一。
通俗的講就是:假設10個人的環,報數為3的人出來,那麼10個人的環第乙個出來的人的序號為2,而10個人的環第二次出來的人相當於9個人第一次出來的人。
程式:
//m:人數
//k:報數
//i:第i個出來的
public
static
intfun(int m,int k,int i) else
}
結果:
經典演算法之約瑟夫環問題
前幾天看到乙個程式設計題,約瑟夫環問題。問題的由來是乙個猶太故事,41乙個人被困,有39個人想要自殺,想活下去的兩個人就出主意說,大家圍成乙個環,報到3的人自殺。結果兩個人成功脫險,也就誕生了這個演算法。由於本人實力有限,寫出的程式也並未進行優化,可能時間複雜度和空間複雜度上有很多問題,只希望給各位...
C 之約瑟夫環
問題原型 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有人都自殺身亡為止。然而josephus 和...
C 之約瑟夫環
0,1,2,3,n 1這n個數排成乙個圈,從數字0開始,每次在圓圈裡面剔除第m個數字。求出這個圓圈最後乙個數字。乙個是使用鍊錶來模擬這個過程 使用公式推導 鍊錶模擬 int lastremaining solution int n,int m else return peoples.begin 公式...