题目
题目大意
输入给出学生数目和C值,以及每个学生的信息。要求按照C值对学生信息作出不同的排序,如果C为1,就将学号升序排列;如果C为2,将学生姓名非递减排序;如果C为3,将学生分数非递减排序。如果不同学生的分数或名字相同,按学号增序输出。
思路
这是一道比较简单的排序题,构造结构体,再按照题目模拟即可,用sort()排序。
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct student{
string id;
string name;
int score;
};
bool cmp1(student x, student y){
return x.id < y.id;
} // id长度都相同,可以直接用字符串比较大小
bool cmp2(student x, student y){
return x.name == y.name ? x.id < y.id : x.name < y.name;
}
bool cmp3(student x, student y){
return x.score == y.score ? x.id < y.id : x.score < y.score;
}
int main(){
int n, c;
cin >> n >> c;
vector<student> v(n);
for (int i = 0; i < n; i++){
cin >> v[i].id >> v[i].name >> v[i].score;
}
if (c == 1){
sort(v.begin(), v.end(), cmp1);
}else if(c == 2){
sort(v.begin(), v.end(), cmp2);
}else{
sort(v.begin(), v.end(), cmp3);
}
for (int i = 0; i < n; i++){
cout << v[i].id << " " << v[i].name << " " << v[i].score << endl;
}
return 0;
}