OpenJudge计算概论-找出第k大的数

简介: /*================================================ 找出第k大的数 总时间限制: 1000ms 内存限制: 1000kB 描述 用户输入N和K,然后接着输入N个正整数(无序的),程序在不对N个整数排序的情况下,找出第K大的数。
/*================================================
找出第k大的数
总时间限制: 1000ms 内存限制: 1000kB
描述
用户输入N和K,然后接着输入N个正整数(无序的),程序在不对N个整数排序的情况下,找出第K大的数。注意,第K大的数意味着从大到小排在第K位的数。并且,要求大家编写这个程序要用到自定义的函数。

输入
N
K
a1 a2 a3 a4 ..... aN
输出
b
样例输入
5
2
32 3 12 5 89
样例输出
32

解析:对每一个数,找一找有多少个数比他大,
如果有0个数比他大,那他就是第1,如果有1个数比他大,那么他就是第2。
那么关系就明确了,如果有n个数比他大,那么他就是第n+1大的 
==================================================*/
#include<stdio.h>
int function(int n,int k)
{
    int p;
    int b;
    int a[100];
    int i;
    int j;
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
 
    for(i=0;i<n;i++)
    {
        p=0;
        for(j=0;j<n;j++)        
        {
            if(i!=j&&a[j]>a[i])
                p++;
            if(p>=k)//已经有多于k个数比a[i]大
                break;
        }
        if(j==n&&p==k-1)//遍历了整个数组,正好有k-1个数比a[i]大,所以a[i]就是第K大的数
        {
            b=a[i];
            break;
        }
    }
    return b;
}
 
int main()
{
    int n;
    int k;
    scanf("%d",&n);
    scanf("%d",&k);
    printf("%d\n",function(n,k));
    return 0;
}

这个其实应该有更好地策略。比如选择排序选到第k次应该就行了。

相关文章
OpenJudge计算概论-字符串最大跨距
/*====================================================================== 字符串最大跨距 总时间限制: 1000ms 内存限制: 65536kB 描述 有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10,想检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在 S中互不交叉(即,S1的右边界点在S2的左边界点的左侧)。
1329 0
|
人工智能 算法
OpenJudge计算概论-字符串排序
/*====================================================================== 字符串排序 总时间限制: 1000ms 内存限制: 65536kB 描述 参考整数排序方法,设计一种为字符串排序的算法,将字符串从小到大输出 输入 第一行为测试数据组数t, 后面跟着t组数据。
798 0
|
人工智能
OpenJudge计算概论-寻找山顶
/*===================================== 寻找山顶 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个m×n的山地上,已知每个地块的平均高程,请求出所有山顶所在的地块(所谓山顶,就是其地块平均高程不比其上下左右相邻的四个地块每个地块的平均高程小的地方)。
842 0
|
ice
OpenJudge计算概论-文字排版
/*====================================================================== 文字排版 总时间限制: 1000ms 内存限制: 65536kB 描述 给一段英文短文,单词之间以空格分隔(每个单词应包括其前后紧邻的标点符号)。
846 0
|
存储 人工智能
OpenJudge计算概论-找最大数序列
/*===================================== 找最大数序列 总时间限制: 1000ms 内存限制: 65536kB 描述 输入n行(n 不大于 30),每行不超过100个无符号整数,无符号数不超过4位。
1277 0
|
存储 BI
OpenJudge计算概论-最长平台
/*=========================================================== 最长平台 总时间限制: 1000ms 内存限制: 65536kB 描述 已知一个已经从小到大排序的数组,这个数组的一个平台(Plateau)就是连续的一串值相同的元素,并且这一串元素不能再延伸。
980 0
OpenJudge计算概论-能被3,5,7整除的数
/*===================================== 能被3,5,7整除的数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个整数,判断它能否被3,5,7整除,并输出以下信息: 1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格); 2、能被其中两个数整除(输出两个数,小的在前,大的在后。
1034 0
|
人工智能 算法 Java
OpenJudge计算概论-计算书费
/*============================================== 计算书费 总时间限制: 1000ms 内存限制: 65536kB 描述 下面是一个图书的单价表: 计算概论 28.9 元/本 数据结构与算法 32.7 元/本 数字逻辑 45.6元/本 C++程序设计教程 78 元/本 人工智能 35 元/本 计算机体系结构 86.2 元/本 编译原理 27.8元/本 操作系统 43 元/本 计算机网络 56 元/本 JAVA程序设计 65 元/本 给定每种图书购买的数量,编程计算应付的总费用。
1222 0
OpenJudge计算概论-求出e的值
/*======================================================================== 求出e的值 总时间限制: 1000ms 内存限制: 65536kB 描述 利用公式e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 求e 。
872 0
|
机器学习/深度学习
OpenJudge计算概论-求满足条件的3位数
/*======================================================================== 求满足条件的3位数 总时间限制: 1000ms 内存限制: 65536kB 描述 编写程序,按从小到大的顺序寻找同时符合条件1和2的所有3位数,条件为: 1.该数为完全平方数 2.该数至少有2位数字相同 例如,100同时满足上面两个条件。
1117 0