約瑟夫環 迴圈鍊錶問題

2022-03-06 04:14:37 字數 729 閱讀 9569

我們構造乙個迴圈鍊錶來表示排成圓圈的人。每個人的鏈結指向圓圈內在他左邊的人。正數i表示圓圈內的第i個人。已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0~n-1,最後結果+1即為原問題的解。

一道演算法面試題如下:

約瑟夫環問題:一圈共有n個人,開始報數,報到m的人自殺,然後重新開始報數,問最後自殺的人是誰?

如圖:內環表示人排列的環,外環表示自殺順序;上面n=41,m=3。

最普通辦法就是模擬整個過程:建乙個bool陣列,true表示此人還活著,false表示已經自殺。可以模擬整個過程

**(解法一):

1 #include2 #include3 #include4

using

namespace

std;

5int

main()626

if(count==n)

2731}32

if(i ==n)

33 i=0;34

}35delete

p;36

return0;

37 }

約瑟夫環問題(迴圈鍊錶)

這是一道比較經典的迴圈鍊錶問題,在華為上機筆試中也出現過。約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。includ...

約瑟夫環問題(迴圈鍊錶)

轉 約瑟夫環 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。include include typedef struct n...

迴圈鍊錶 約瑟夫環問題

正好這幾天在看資料結構,覺得鍊錶應用挺廣的,特寫一例項。問題描述 選首領。n個遊戲者圍成一圈,從第乙個開始順序報數1,2,3.凡報到3者退出圈子,最後留在圈中的人為首領。思路 建立乙個包含n個節點的單迴圈鍊錶來模擬n個人圍成的圈。節點的資料域存放遊戲者的編號。在程式中,以刪除節點模擬人退出圈子的處理...