题目
题目大意
输入给出学生数目和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;
}