Description
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
Input
第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)。 其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
Output
输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)
Accepted Code
#include <bits/stdc++.h>
using namespace std;
struct $
{
char ser[20];
double s;
};
$ stu[105];
bool comp($ a, $ b)
{
return a.s > b.s;
}
int main()
{
int n, k;
cin >> n >> k;
for (int i = 0;i < n;++i)
{
scanf("%s %lf", stu[i].ser, &stu[i].s);
}
sort(stu, stu + n, comp);
printf("%s %g\n", stu[k - 1].ser, stu[k - 1].s);
return 0;
}
解后反思
%g用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的0。即%g是根据结果自动选择科学记数法还是一般的小数记数法

