题目:打印队列
题目介绍:现在用打印机打印队列,已知打印任务有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()) == ' ') 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 }
结果: