STL容器练习汇总(1)

洛谷

P1138 第 k 小整数

题目描述

现有 n 个正整数,要求出这 n 个正整数中的第 k 个最小整数(相同大小的整数只计算一次)。

输入格式

第一行为 n 和 k; 第二行开始为 n 个正整数的值,整数间用空格隔开。

输出格式

第k个最小整数的值;若无解,则输出 NO RESULT

输入样例

10 3
1 3 3 7 2 5 1 2 4 6

输出样例

10 3
1 3 3 7 2 5 1 2 4 6

说明/提示

n≤10000,k \leq 1000k≤1000,正整数均小于 3000030000。

代码

本题用set集合自动去重排序,再用迭代器历遍。

#include <bits/stdc++.h>
using namespace std;
int a,i, n,k,m;
set<int>Q;
set<int>::iterator it;
int main()
{
    scanf("%d%d",&n,&k);
    for (i = 1; i <= n; i++)
        scanf("%d", &a),Q.insert(a);
    if(Q.size()<k)
    cout<<"NO RESULT";
    else{
        it=Q.upper_bound(0);
        for(i=1;i<k;i++)
        it++;
        cout<<*it;
    }
    return 0;
}

P1449 后缀表达式

题目描述

所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。

如:3*(5-2)+7 对应的后缀表达式为:3.5.2.-*7.+@。在该式中,@ 为表达式的结束符号。. 为操作数的结束符号。

输入格式

输入一行一个字符串 s,表示后缀表达式。

输出格式

输出一个整数,表示表达式的值。

输入样例

3.5.2.-*7.+@

输出样例

16

说明/提示

数据保证,1≤∣s∣≤50,答案和计算过程中的每一个值的绝对值不超过 10^9。

代码

此题是一道使用栈(stack)的裸题...

思路:

  1. 如果碰到数字,将其放入临时数组当中,方便以后求数字
  2. 如果碰到'.',那么将临时数组中的字符串转化成数字(具体操作看程序注释),将其压入数字栈中
  3. 如果碰到运算符号,那么将栈顶的两个元素取出做相应的运算(注意:如果碰到-'或'/'应该用栈顶第二个元素减或除以栈顶元素!!!
  4. 最后输出数字栈中剩余的最后一个
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值