第k小整数


 

题目描述

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

k≤1000,正整数均小于 30000。

输入描述:

 

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

输出描述:

 

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

示例1

输入

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

输出

3

代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
    int a[10001] = { 0 }; //输入的一串数字
    int k;
    int t;
    int b[10001] = { 0 }; //剔除掉相同数字的新的一串数字
    scanf("%d", &k);
    int j = 0;
    for (int i = 0; i < n; i++) {
        scanf("%d", &t);
        if (a[t] == 0) {
            a[t] = t;
            b[j] = t;              //从输入步骤就开始剔除相同数字,类似于桶排序,b数组的所有 
                                   //下表数都是0,当第一次加入新数时,if判真执行,如果再输 
                                    
                                   // 入一个相同的数字if判假不执行
            j++;                   //我们用j来控制b数组的大小,让b下标严格从0开始依次加加
        }          
    }
   
    int temp = b[0];
    for ( int i = 0; i < j - 1; i++)
    {
        for ( int h = 0; h < j - i - 1; h++)//别忘了让j减去1,否则最后一个数会跟一个地址 
                                            //比大小并交换
       {
            if (b[h + 1] < b[h])
            {
                temp = b[h];             //冒泡算法排序
                b[h] = b[h + 1];
                b[h+ 1] = temp;
            }
        }
    }
   
   
    if (k  > j||k==0)                     //判断一下临界情况就OK了
    {
        printf("NO RESULT");
    }
    else {
        printf("%d", b[k - 1]);            //别忘了数组下标是从0开始的
    }
    
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值