题意:往一个塔里放数,取数,找第 k 个大的数
刚开始用 stack 做的,不知道怎样找第 k 个数
又想到用 vector ,以前用过
注释有点多吧 ......
代码如下:
#include<stdio.h> #include<vector> //定义 c++ 中的容器所需的头文件 #include<algorithm> //sort 排序所需的头文件 using namespace std; //c++ 要用到 vector<int> qq1, qq2; //定义容器 qq1,qq2,相当于数组,比数组功能大点 int main() { int t, n, k; scanf("%d", &t); while(t--) { qq1.clear(); //由于多组数据,每次都将 qq1 清空 scanf("%d%d", &n, &k); char ch[10]; while(n--) { int a; scanf("%s", ch); if(ch[0] == 'P') { scanf("%d", &a); qq1.push_back(a); //将 a 放到容器 qq1 最后面 } else if(ch[0] == 'T') { int len = qq1.size(); //容器 qq1 中元素个数 printf("%d ", qq1[len - 1]); //输出 qq1 中最后面的元素,注意下标:len - 1,从 qq1[0] 开始 qq1.pop_back(); //将 qq1 最后的元素舍弃 } else { int len = qq1.size(); qq2 = qq1; //将 qq1 复制到 qq2,避免影响 qq1 sort(qq2.begin(), qq2.end()); //将 qq2 从小到大排序 if(len >= k) //若元素个数大于 k ,输出第 k 个数 printf("%d ", qq2[k - 1]); else printf("%d ", qq2[len - 1]); //否则,输出最大的数 } } } return 0; }