佇列實現約瑟夫問題

2022-06-23 14:21:10 字數 768 閱讀 7707

描述約瑟夫問題:

有n只猴子,按順時針方向圍成一圈選大王(編號從1到n),從第1號開始報數,一直數到m,數到m的猴子退出圈外,剩下的猴子再接著從1開始報數。就這樣,直到圈內只剩下乙隻猴子時,這個猴子就是猴王,程式設計求輸入n,m後,輸出最後猴王的編號。

輸入

每行是用空格分開的兩個整數,第乙個是 n, 第二個是 m ( 0 < m,n <=300)。最後一行是:0 0

輸出

對於每行輸入資料(最後一行除外),輸出資料也是一行,即最後猴王的編號

樣例輸入

6 2

12 4

8 30 0

樣例輸出
5

17

解題思路:

就用佇列指定乙個規則,不滿足規則的就出隊,留下的就是符合規則的。

//佇列實現約瑟夫問題

# include# includeusing namespace std;

queueq;

int result(int n,int m)

q.pop();

j=m;

n--;

} return q.front();

}int main()

return 0;

}

約瑟夫問題 鍊錶 佇列實現

和之前說的猴子選大王一樣,一共n個人報數,報道m的人出列,之後繼續從1開始報數,直到最後就剩乙個人 之前說了一下陣列的實現方法,其實還有很多實現的方法,這裡說一下鍊錶剔除的方法以及c 佇列函式的實現方法 先說鍊錶實現吧 include include define len sizeof struct...

約瑟夫環問題 佇列實現,迴圈陣列實現

起源 約瑟夫環問題的起源來自猶太歷史學家約瑟夫和他的朋友以及39其餘的猶太人,總共41人為了躲避敵人,藏在乙個山洞中,39個猶太人決定寧願死也不被敵人抓到,於是決定自殺,所有人排成乙個圈,由第乙個人開始報數,每當數到3,就自殺。這個遊戲接著從自殺的位置開始,還是從1數到3。依次類推,約瑟夫將朋友和自...

約瑟夫環 佇列實現

約瑟夫環這個經典的資料結構鍊錶問題,想必大家都有所涉及。我們怎麼用佇列去實現這個問題呢,首先我們要將所有的人進行入隊操作,因為編號是1 n,那麼我們使用乙個迴圈壓入就行。for int i 1 i n i 然後我們會發現只要留下最後乙個人即不再報數了,所以我們可以判斷當佇列的長度大於1時便讓佇列一直...