计算机基础知识大赛 5
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 176 测试通过 : 63
总提交 : 176 测试通过 : 63
比赛描述
计算机基础大赛结束后需要尽快对参赛选手的成绩进行处理,现在要求录入n个人的成绩,然后找出排名第k的选手的成绩。
输入
输入数据包含多组样例,每组包含两行。
第一行输入n和k
第二行输入n个成绩
输出
对于每组样例,输出第k名的成绩。
样例输入
5 2
3 1 4 2 5
样例输出
4
提示
undefined
题目来源
计算机基础知识大赛 2013
#include<iostream>
#define MAX_N 1000
int a[MAX_N];
int findkth(int *a,int n,int k){
int i,j,temp;
temp = a[0];
i = 0;
j = n-1;
while(i<j){
while(i<j && a[j]>=temp){
j--;
}
a[i] = a[j];
while(i<j && a[i]<=temp){
i++;
}
a[j] = a[i];
}
a[i] = temp;
if(i>k){
return findkth(a,i,k);
}else if(i<k){
return findkth(a+i+1,n-i-1,k-i-1);
}else{
return temp;
}
}
int main(){
int n,i,k;
while(scanf("%d%d",&n,&k)==2){
for(i=0;i<n;i++){
scanf("%d",a+i);
}
printf("%d\n",findkth(a,n,n-k));
}
}