洛谷
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)的裸题...
思路:
- 如果碰到数字,将其放入临时数组当中,方便以后求数字
- 如果碰到'.',那么将临时数组中的字符串转化成数字(具体操作看程序注释),将其压入数字栈中
- 如果碰到运算符号,那么将栈顶的两个元素取出做相应的运算(注意:如果碰到-'或'/'应该用栈顶第二个元素减或除以栈顶元素!!!)
- 最后输出数字栈中剩余的最后一个