题目描述:
给定学生的成绩单,成绩单中包含每个学生的学号和分数,请将成绩单按成绩从低到高的顺序重新排序。
如果学生的成绩相同,则按照学号从小到大的顺序进行排序。
输入格式
第一行包含整数 N,表示学生数量。
接下来 N 行,每行包含两个整数 p 和 q,表示一个学生的学号和成绩。
学生的学号各不相同。
输出格式
输出重新排序后的成绩单。
每行输出一个学生的学号和成绩,用单个空格隔开。
数据范围
1≤N≤100,
1≤p≤100,
0≤q≤100
输入样例:
3
1 90
2 87
3 92
输出样例:
2 87
1 90
3 92
相关代码:
#include <iostream>
#include <algorithm>
using namespace std;
struct student{
int id;
int score;
};
const int N = 110;
student a[N];
bool cmp(student b,student c){
if(b.score != c.score)
return b.score<c.score; //成绩不同,按成绩从小到大排序
else
return b.id<c.id; //成绩相同,按学号从小到大排序
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].id>>a[i].score;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
cout<<a[i].id<<" "<<a[i].score<<endl;
}
return 0;
}
笔记:
sort函数的模板有三个参数:void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
(1)第一个参数first:是要排序的数组的起始地址。
(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)
(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序。