約瑟夫問題原型: 0~n-1 n 個數,從 0 開始,每數 k 個數,刪除乙個,最後留下來的數是多少。
題意: 1~n 個數,第一次刪掉 m ,每隔 k 個數刪掉乙個,最後留下來的數是多少。
分析:
約瑟夫原型: 設從 0 開始 每k 個數刪掉乙個,最後留下的是 f(n);
則有遞推公式 f(n) = (f(n-1) + k)% n;
理由:
第一次刪掉 4 ,那麼如果沒有了,只可能是旁邊的 5 (每次都重新排序了,第二個圖);
那麼本題是,1~n ,第一次刪掉的是 m,而不像原型裡面要數,一上來就刪,則起點就是 m+ 1-k,答案 f(n) + m + 1-k;
#include usingnamespace
std;
const
int maxn = 10000 + 5
;int
f[maxn];
intmain()
int ans = (m+1+f[n]-k) %n;
if(ans<=0) ans+=n;
printf(
"%d\n
",ans);
}return0;
}
約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...
約瑟夫問題 約瑟夫環
約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...
約瑟夫問題
這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...