P1138 第 k 小整数 c++(set函数)

题目描述

现有 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<bits/stdc++.h>
#include<set>
using namespace std;

int main(){
    int n, k;
    cin >> n >> k;
    set<int> s;
    for (int i = 1; i <= n; i++)
    {
        int a;//定义一个临时变量方便输入
        cin >> a;
        s.insert(a);//插入数据
    }
    int cnt=0;//定义一个计数
    //遍历set
    for(set<int>::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!!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值