Description:
题目大意:给出 n 个学生的ID,name,grade。
- C = 1,按照 ID 升序排序。
- C = 2,按照 name 升序排序,如果名字相同,按照 ID 升序排序。
- C = 3,按照 grade 升序排序,如果 grade 相同,按照 ID 升序排序。
解题思路:
算法标签:排序
代码:
// TSWorld
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <map>
#include <stack>
#include <cmath>
#include <queue>
using namespace std;
#define LL long long
const int N = 100050;
struct Node {
string name;
string ID;
int grade;
}students[N];
bool cmp1(struct Node a,struct Node b) {
return a.ID < b.ID;
}
bool cmp2(struct Node a,struct Node b) {
if(a.name == b.name)
return a.ID < b.ID;
else
return a.name < b.name;
}
bool cmp3(struct Node a,struct Node b) {
if(a.grade == b.grade)
return a.ID < b.ID;
else
return a.grade < b.grade;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n = 0;
char cmd;
cin>>n>>cmd;
for(int i = 1;i <= n;i++)
cin>>students[i].ID>>students[i].name>>students[i].grade;
if(cmd == '1')
sort(students+1,students+n+1,cmp1);
else if(cmd == '2')
sort(students+1,students+n+1,cmp2);
else
sort(students+1,students+n+1,cmp3);
for(int i = 1;i <= n;i++){
if(i != 1)
cout<<"\n";
cout<<students[i].ID << " " <<students[i].name<< " " <<students[i].grade;
}
return 0;
}