一般方法和sort自定义排序。
输出
输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)
样例输入
5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9
样例输出
90788004 68.4
一般方法:
#include<stdio.h>
struct student{
int num;
double n;
}a[1000],t;
int main()
{
int m,n;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d %lf",&a[i].num,&a[i].n);
}
for(int i=1;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(a[j].n<a[j+1].n)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("%d %g",a[m-1].num,a[m-1].n);
}
sort自定义排序。
sort()函数时间复杂度为n*log2(n),执行效率较高。
用法:sort(begin, end, cmp),例如:sort(a,a+n,cmp); 不写第三个参数就会默认从小到大排序。需要自己写一个函数传到sort中。如,本题用到的结构体排序。
boolcmp(stu x,stu y) //注意参数类型
{
return x.f>y.f;
}
#include<bits/stdc++.h>
using namespace std;
struct stu{
int id;
double f;
}a[1000];
bool cmp(stu x,stu y){
return x.f>y.f;
}
int main(){
int i,m,n;cin>>n>>m;
for(i=0;i<n;i++)
cin>>a[i].id>>a[i].f;
sort(a,a+n,cmp);
printf("%d %g",a[m-1].id,a[m-1].f);
return 0;
}