题意:往一个塔里放数,取数,找第 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\n", 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\n", qq2[k - 1]);
                else printf("%d\n", qq2[len - 1]);  //否则,输出最大的数
            }
        }
    }
    return 0;
}
View Code

 

posted on 2014-05-22 21:02  Acmer_侯贺帅  阅读(198)  评论(0编辑  收藏  举报