題目鏈結:
某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的規則如下:從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠攏,再從頭開始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二報數。。。,以後從頭開始輪流進行一至二報數、一至三報數直到剩下的人數不超過三人為止。
input
本題有多個測試資料組,第一行為組數n,接著為n行新兵人數,新兵人數不超過5000。
output
共有n行,分別對應輸入的新兵人數,每行輸出剩下的新兵最初的編號,編號之間有乙個空格。
sample input
2
2040
sample output
1719
11937
分析:
剔除一些數,但不改變量的順序,可以用佇列實現模擬過程。
先將1~n放入佇列
對於剔除叫到2的人,兩個數構成乙個迴圈體,保留第乙個,刪除第二個
迴圈體總共有people/2個
對於每個迴圈體,每次把q.front放入佇列,並出佇列。對於第二個元素,直接出隊
要注意people%2可能不為0,直接放到佇列後
對於剔除叫到3的人,3個數構成乙個迴圈體,
把第乙個,第二個依次放到隊尾,剔除第三個數
**:
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
intn=5
*1e3+10
;int
main()
if(people%2
!=0)
}else
while
(people%3
!=0)
/*可能剩餘
1個人或2個人
,構不成迴圈*/
}f++
;}printf
("%d",q
.front()
);q.
pop();
while(q
.size()
!=0)
printf
("\n");
}}
佇列 先進先出
看前面的是什麼型別 指標 普通 出現指標指向空報錯的情況下,傳參不能為空,可以傳個空間的位址給他 queue front next null 從尾進 先進先出 define crt secure no warnings pragma once include include include incl...
佇列實現先進先出
1 入隊,如例 q.push x 將x 接到佇列的末端。2 出隊,如例 q.pop 彈出佇列的第乙個元素,注意,並不會返回被彈出元素的值。3 訪問隊首元素,如例 q.front 即最早被壓入佇列的元素。4 訪問隊尾元素,如例 q.back 即最後被壓入佇列的元素。5 判斷佇列空,如例 q.empty...
士兵佇列訓練問題
實驗任務 某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的 規則如下 從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠 攏,再從頭開 始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二 報數。以後從頭開始輪流進行一至二報數 一至三報 ...