题目描述
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
输入:
第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)
其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
输出:输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)
输入案例:
5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9
输出案例:
90788004 68.4
思路(sort排序)
根据题目,我们先求出第k个成绩然后找出对应的学号即可,我们就可以先对成绩进行排序,在这里我们直接引用STL中sort排序,sort排序默认从小到大。题目中,我们第K名成绩排序可以从大到小进行排序,则sort(begin,end,greater<type>())是从大到小进行排序。求出第K名之后找到对应学号即可。
代码实现
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n,m;
int student_id[N];
double student_score[N];
double student_score1[N];
int main(){
cin>>n>>m;
for (int i = 0; i < n; i++) {
cin>>student_id[i]>>student_score[i];
}
for (int i = 0; i < n; i++) {
student_score1[i] = student_score[i];
}
sort(student_score,student_score+n,greater<double>());//从大到小进行排序
for (int i = 0; i < n; i++) {
if (student_score1[i]== student_score[m-1]){
cout<<student_id[i]<<" "<<student_score[m-1];
}
}
}