因為剛使用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...