士兵佇列訓練問題(佇列 先進先出)

2021-10-03 12:31:09 字數 1447 閱讀 1480

題目鏈結

某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的規則如下:從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠攏,再從頭開始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二報數。。。,以後從頭開始輪流進行一至二報數、一至三報數直到剩下的人數不超過三人為止。

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...

士兵佇列訓練問題

實驗任務 某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的 規則如下 從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠 攏,再從頭開 始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二 報數。以後從頭開始輪流進行一至二報數 一至三報 ...