構造佇列,網易,想直接修改佇列中的值,就用queue
阿新 • • 發佈:2019-02-10
小明同學把1到n這n個數字按照一定的順序放入了一個佇列Q中。現在他對佇列Q執行了如下程式:
做取出隊頭的值操作的時候,並不彈出當前隊頭。
小明同學發現,這段程式恰好按順序輸出了1,2,3,...,n。現在小明想讓你構造出原始的佇列,你能做到嗎?[注:原題樣例第三行5有錯,應該為3,以下已修正]
while(!Q.empty()) //佇列不空,執行迴圈 { int x=Q.front(); //取出當前隊頭的值x Q.pop(); //彈出當前隊頭 Q.push(x); //把x放入隊尾 x = Q.front(); //取出這時候隊頭的值 printf("%d\n",x); //輸出x Q.pop(); //彈出這時候的隊頭 }
小明同學發現,這段程式恰好按順序輸出了1,2,3,...,n。現在小明想讓你構造出原始的佇列,你能做到嗎?[注:原題樣例第三行5有錯,應該為3,以下已修正]
輸入描述:
第一行一個整數T(T ≤ 100)表示資料組數,每組資料輸入一個數n(1 ≤ n ≤ 100000),輸入的所有n之和不超過200000。
輸出描述:
對於每組資料,輸出一行,表示原始的佇列。數字之間用一個空格隔開,不要在行末輸出多餘的空格.
#include <iostream> #include <vector> #include <algorithm> #include<queue> using namespace std; int main() { int T; cin >> T; for (int i = 0; i < T; i++) { int n; cin >> n; vector<int> a(n, 0);//想直接修改佇列中的值,就用queue<int*> queue<int*> q;//想想為什麼不用queue<int> q,而在佇列中使用的是地址。int* for (int i = 0; i < n; i++) q.push(&a[i]); int k = 1; while (!q.empty()) { q.push(q.front()); q.pop(); *q.front() = k++;//如果使用queue<int>,此處該為q.front() = k++,但是結果並未改變,說明q.front()會產生臨時變數。 q.pop(); } for (int i = 0; i < n-1; i++) cout << a[i] << " "; cout << a[n - 1] << endl; } //system("pause"); return 0; }