现有 n 个正整数,要求出这 n 个正整数中的第 k 个最小整数(相同大小的整数只计算一次)。
第一行为 n 和 k; 第二行开始为 n 个正整数的值,整数间用空格隔开。
第k个最小整数的值;若无解,则输出 NO RESULT
。
输入 #1
10 3 1 3 3 7 2 5 1 2 4 6
输出 #1
3说明/提示
n≤10000,k≤1000,正整数均小于 30000。
(个人)解题思路:按题目的要求:相同大小的整数只计算一次,那就是要解决两问题:
1.从小到大排序
2.把重复的数字除掉,再找对应位置的数就可以了。
使用c++里的set函数就可以解决这两个问题,set函数的主要作用是自动去重并按升序排序。
AC代码:c++
#include
#include
using namespace std;
int main(){
int n, k;
cin >> n >> k;
set s;
for (int i = 1; i <= n; i++)
{
int a;//定义一个临时变量方便输入
cin >> a;
s.insert(a);//插入数据
}
int cnt=0;//定义一个计数
//遍历set
for(set::iterator it=s.begin();it!=s.end();it++){
cnt++;//累加cnt,如果cnt等于k,那就是遍历到了第k个数了
if(k == cnt){
cout << *it;//输出
break;
}
}
//如果遍历set结束后,还未达到k,说明不存在
if(k > cnt){
cout << "NO RESULT";
}
return 0;
}
题目来源:洛谷
菜鸟一只,第一次写,嘻嘻,写得不好请指正,谢谢各位dalao!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)