假設下標從0開始,0,1,2 .. m-1共m個人,從1開始報數,報到k則此人從環出退出,問最後剩下的乙個人的編號是多少?
現在假設m=10
0 1 2 3 4 5 6 7 8 9 k=3
第乙個人出列後的序列為:
0 1 3 4 5 6 7 8 9
即:3 4 5 6 7 8 9 0 1(*)
我們把該式轉化為:
0 1 2 3 4 5 6 7 8 (**)
則你會發現: ((**)+3)%10則轉化為(*)式了
也就是說,我們求出9個人中第9次出環的編號,最後進行上面的轉換就能得到10個人第10次出環的編號了
設f(m,k,i)為m個人的環,報數為k,第i個人出環的編號,則f(10,3,10)是我們要的結果
當i=1時, f(m,k,i) = (m+k-1)%m
當i!=1時, f(m,k,i)= ( f(m-1,k,i-1)+k )%m
所以程式如下:
int josephu(int m,int k,int i)
int main(int argc, char* argv)
deletef;
}
約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...
約瑟夫問題 約瑟夫環
約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...
約瑟夫問題
這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...