原題連線
題目描述
0, 1, …, n-1這n個數字(n>0)排成乙個圓圈,從數字0開始每次從這個圓圈裡刪除第m個數字。
求出這個圓圈裡剩下的最後乙個數字。
輸入樣例:
n=5 , m=3
輸出樣例:
3
解題報告
題意理解
這道題首先是從 0 - n 的數字組成乙個環,每次從中拿出乙個數字,看最後剩下的數字是誰
演算法處理
演算法一:寫乙個鍊錶,模擬去除的過程
演算法二:
發現數學規律,求遞推公式
我們假設 m = 3
並且當 n = 1 時, f(n,m) = 0(倖存者下標)
當 n = 2時,f(2,3) = (f(1,3)+3)%2 = 3%2 = 1
可能有人會問,為什麼 n =2 時是這個式子
假設 n , m 時,則被殺的是(m-1)%n,令其等於k
則 n-1,m時,(0,1,…,k-1,k+1,…,n-1)此時從,k+1作第0個,相當於 n 個人時,向右移動 所以 f(n-1,m) = (f(n,m) - m)%(n-1)
那從 n -1到 n,就有 f(n,m) = (f(n-1,m)+m)%n 逆對映
f(n,m) = (f(n-1,m)+m)%n
**實現
方法一:
#include class solution
it = nums.erase(it); //刪除第m個元素;
if (it == nums.end()) it = nums.begin();
k = m - 1;
}return nums.front();
}};
方法二:
class solution
return p;
}};
約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...
約瑟夫問題 約瑟夫環
約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...
約瑟夫環問題
約瑟夫環問題 問題描述 編號是1,2,n的n個人按照順時針方向圍坐一圈,每個人持有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個人開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人...