題目:列印隊列 題目介紹:現在用印表機列印隊列,已知列印任務有9個優先順序(1-9),現在給出一系列任務,求輸出列印順序(任務下標,從0開始)。 例: 輸入:9,3,5,4,7,1 輸出:0,4,2,3,1,5 分析:第一點是不知道輸入任務的個數,這個要用 reserve 指令來解決;第二點是不要忽略 ...
題目:列印隊列
題目介紹:現在用印表機列印隊列,已知列印任務有9個優先順序(1-9),現在給出一系列任務,求輸出列印順序(任務下標,從0開始)。
例:
輸入:9,3,5,4,7,1
輸出:0,4,2,3,1,5
分析:第一點是不知道輸入任務的個數,這個要用 reserve 指令來解決;第二點是不要忽略逗號,不要天真的忽略掉。要用到棧的相關知識,但又不能完全用棧來儲存數據,因為要輸出的是下標,這個一般要轉換成數組來解決。
代碼:
1 #include <iostream> 2 #include <string> 3 #include <conio.h> 4 #include <vector> 5 using namespace std; 6 int max(vector <int> p, int n); 7 int main() 8 { 9 int n = 0; 10 int a; 11 char c; 12 vector <int> p; 13 p.reserve(100); 14 p.push_back(0); 15 int i = 0; 16 while (cin >> a) 17 { 18 p[n++] = a; 19 p.push_back(n); 20 if ((c = getchar()) == '\n') 21 { 22 break; 23 } 24 } 25 for (i = 0; i < n - 1; i++) 26 { 27 cout << max(p,n) << ",";//輸出最大值的下標 28 p[max(p, n)] = 0;//輸出一個值就初始化一個值 29 } 30 cout << max(p, n); 31 } 32 int max(vector <int> p, int n) 33 { 34 int a = 0, b = 0; 35 for (int i = 0; i < n; i++) 36 { 37 if (p[i] > a) 38 { 39 a = p[i]; 40 b = i; 41 } 42 } 43 return b; 44 }
結果: