鍊錶之單鏈表約瑟夫問題(二)

2021-07-09 06:28:36 字數 641 閱讀 7415

約瑟夫環(約瑟夫問題)是乙個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0~n-1,最後[1]  結果+1即為原問題的解。

約瑟夫環:遞迴演算法

假設下標從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)=

鍊錶之單鏈表

上週給前端的小夥伴們進行了講課,想著總結一下,但是直到推到現在,我才開始。上週講課的內容是es6和鍊錶。我大致把鍊錶的內容總結一下,也算是個回顧。一 初始鍊錶 鍊錶定義 使用一組任意的儲存單元儲存線性表的資料元素 可連續,也可是不連續 它是一種順序儲存。也就是說,鍊錶是線性結構,各個元素的儲存位置都...

單鏈表之歸併鍊錶

兩個鍊錶都是增序,要求合併後的結果也為增序且不含重複資料 直接上 編譯環境vs2017 include pch.h include using namespace std 單鏈表 typedef struct lnode lnode 輸出單鏈表 void outputlist lnode c cou...

環形單鏈表約瑟夫問題

乙個環形單鏈表,從頭結點開始向後,指標每移動乙個結點,就計數加1,當數到第m個節點時,就把該結點刪除,然後繼續從下乙個節點開始從1計數,迴圈往復,直到環形單鏈表中只剩下了乙個結點,返回該結點。思路 當鍊表為空或者鍊錶只有乙個節點或者m 1時,不做處理,直接返回原鍊錶即可。if head null h...