queue求解迴圈報數刪除問題

2021-09-12 10:07:47 字數 1111 閱讀 6022

因為剛使用queue物件,所以先記錄一下基本用法方便複習

q.empty() #判斷佇列是否為空,空返回true,非空返回false

q.size() #返回佇列中元素的個數

q.pop() #直接刪除隊首元素,沒有返回值

q.push() #在隊尾壓入

q.front() #返回隊首元素

q.back() #返回隊尾元素

可以使用佇列解決圓桌報數退出等問題。

分析:每隔兩個數刪除乙個,可以使用乙個計數器計數,沒有達到2的就將佇列的首元素不斷插入到隊尾,知道計數器到達要求則彈出隊首元素即可。

**實現:

#include#includeusing namespace std;

int main()

int count = 0;

//只要還有他不是乙個元素都繼續即可

while (q.size() != 1)

//是2則刪除該元素,同時將count置為0

下列**輸出最後乙個出列的人。

#include#includeusing namespace std;

void queue_mov(queue& q)

int main()

//將佇列報數的開始那個人放在隊頭,需要將s-1個人移動隊尾即可

for (int i = 0; i < s-1; i++)

int count = 1;//報數從1開始的不是0

while (q.size() != 1)

else

} cout << q.front() << endl;

}}

迴圈報數問題

有n個人按照 到n編號圍成乙個圈做遊戲,從第乙個人開始從 報數,數到m的人退出遊戲,他後面的人接著重新從 開始報數 問最後剩下的人是幾號?這個問題被稱為約瑟夫 josephus 環問題。最容易想到的方法是用乙個迴圈鍊錶來模擬遊戲,直到最後只剩下1人 則可得到他的號碼 這種演算法的空間複雜度是 o n...

佇列應用1 求解報數問題

1 問題描述 n個人從左向右編號1 n,然後從左向右報數 1,2,1,2,1,2.數到1的人出隊,數到2的人立即站到佇列的最右端 繼續報數,直到所有人出列 2 資料組織 使用順序佇列 3 設計演算法 1.全部入隊 2.出隊乙個,輸出編號 3.若佇列不為空,再出隊乙個元素,並將剛出列的元素進隊到隊尾 ...

n個人迴圈報數1 3問題

主要的思路見下圖 我相信只要大家吧自己的思路理清楚了,實現就簡單了。以下給出 public class test public static int getlastname int num return getlastname aa static arraylistnewlist public st...