約瑟夫環問題

2021-09-25 09:29:27 字數 1107 閱讀 7519

原題連線

題目描述

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報數,如此下去,直到所有人...