約瑟夫環這個經典的資料結構鍊錶問題,想必大家都有所涉及。
我們怎麼用佇列去實現這個問題呢,首先我們要將所有的人進行入隊操作,因為編號是1…n,那麼我們使用乙個迴圈壓入就行。
for
(int i =
1; i <= n; i++
)
然後我們會發現只要留下最後乙個人即不再報數了,所以我們可以判斷當佇列的長度大於1時便讓佇列一直進行報數操作。
while(q.size() > 1)
然後我們開始模擬報數操作,首先從設定乙個計數器,儲存當前報數到幾了。
我們從隊首取乙個人出隊,如果這個人報數正好是m那麼就退出遊戲,然後下乙個小朋友繼續從1開始報數。如果不是m的話在重新入隊,計數器繼續+1
while
(q.size()
>1)
else
}
#include
#include
using
namespace std;
intmain()
int cur =1;
while
(q.size()
>1)
else
} cout << q.
front()
<< endl;
return0;
}
約瑟夫環問題 佇列實現,迴圈陣列實現
起源 約瑟夫環問題的起源來自猶太歷史學家約瑟夫和他的朋友以及39其餘的猶太人,總共41人為了躲避敵人,藏在乙個山洞中,39個猶太人決定寧願死也不被敵人抓到,於是決定自殺,所有人排成乙個圈,由第乙個人開始報數,每當數到3,就自殺。這個遊戲接著從自殺的位置開始,還是從1數到3。依次類推,約瑟夫將朋友和自...
約瑟夫環實現
約瑟夫環問題,這是乙個很經典演算法,處理的關鍵是 偽鍊錶 問題描述 n個人圍成一圈,從第乙個人開始報數,報到m的人出圈,剩下的人繼續從1開始報數,報到m的人出圈 如此往復,直到所有人出圈。模擬此過程,輸出出圈的人的序號 1 2 3 4 5 6 7 8 3,6 出圈 剩下7 8 1 2 4 5 7 8...
約瑟夫環(棧和佇列)
題目 n個數字 1,2,3 n 形成乙個圓圈,從數字1開始,每次從這個圓圈中刪除第m個數字 第乙個為當前數字本身,第二個為當前數字的下乙個數字 當乙個數字刪除後,從被刪除數字的下乙個繼續刪除第m個數字。求出在這個圓圈中剩下的最後乙個數字。input 輸入 n 9 m 5output the last...