这道题其实不难,之前用桶排序写的程序很麻烦最终只得到了80分,不知道错在哪里…
看题解大佬用的结构体感觉非常妙
思路很简单,定义一个学生的结构体,利用这个保存学生的学号和成绩,并重载cmp方法,以便调用sort函数
这道题给我的启发就是:当涉及到多个元素的排序时(如一个学生有学号.成绩 一个商品有价格,尺码),这时使用结构体并用sort函数进行排序是非常方便的
贴上代码:
#include<bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct student {
int num;
int grade;
}student;
student s[10000];
//重载cmp函数,用于sort比较
int cmp(student s1,student s2){
if(s1.grade>s2.grade) {
return true;
}
else if(s1.grade == s2.grade){
//如果分数相同则比较学号
if(s1.num<s2.num) return true;
else return false;
}
else return false;
}
int n,m,line,gradeLine,sum;
int main(int argc, char** argv) {
cin >> n >> m;
for(int i = 0;i<n;i++){
cin >> s[i].num >> s[i].grade;
}
//录取排名
line = floor(m*1.5);
//进行排序
sort(s,s+n,cmp);
//分数线
gradeLine = s[line-1].grade;
for(int i = 0;i<n;i++){
if(s[i].grade>=gradeLine) sum++;
}
cout << gradeLine << " " << sum << endl;
for(int i = 0;i<sum;i++){
cout << s[i].num <<" " << s[i].grade << endl;
}
return 0;
}