PAT甲级1028List Sorting

[toc]

题目介绍

  • 题目链接

    https://pintia.cn/problem-sets/994805342720868352/problems/994805468327690240

  • 题目考点

    结构体排序,就超简单……

  • 题目难度

    PAT甲级25分

  • 题目大意

    Excel可以按照某一列进行排序,要求实现这个函数。

  • 输入

    • N:整数,不超过100000,记录的数量
    • C:整数,按照C这1列进行排序
    • N个学生:每行包括学生ID(6位数字),名字(不包含空格、不超过8个字符的字符串),分数(范围[0,100])
  • 输出

    输出N个学生。如果C=1则按照ID升序排列;如果C=2则按照名字非降序排列;如果C=3则按照分数非降序。如果名字或分数重复就按ID增序排列。

题解

解题思路

  • 啊这(问号脸,这么简单?),学生放在vector里,写个结构体排序函数(把C定义成全局变量,在排序函数里根据C选取排序规则),调用STL里的sort就好了。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Problem: PAT Advanced 1028
// URL: https://pintia.cn/problem-sets/994805342720868352/problems/994805468327690240
// Tags:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int c;

struct Student{
string id, name;
int grade;
};

bool studentCmp(Student& s1, Student& s2){
if (c==1){
return s1.id < s2.id;
}
else if(c==2){
return s1.name==s2.name? s1.id < s2.id : s1.name < s2.name;
}
return s1.grade==s2.grade? s1.id < s2.id : s1.grade < s2.grade;
}

int main()
{
int n;
scanf("%d%d", &n, &c);
vector<Student> students(n);
for(int i=0; i<n; i++)
cin >> students[i].id >> students[i].name >> students[i].grade;
sort(students.begin(), students.end(), studentCmp);
for (auto it=students.begin(); it!=students.end(); it++){
printf("%s %s %d\n", it->id.c_str(), it->name.c_str(), it->grade);
}
return 0;
}

Github(github.com):@chouxianyu

Github Pages(github.io):@臭咸鱼

知乎(zhihu.com):@臭咸鱼

博客园(cnblogs.com):@臭咸鱼

B站(bilibili.com):@绝版臭咸鱼

微信公众号:@臭咸鱼

转载请注明出处,欢迎讨论和交流!