PAT A1028.List Sorting

Time Limit: 200ms                              Memory Limit:65636 KB
题目描述
Excel can sort records according to any column.Now you are supposed to imitate this
function.
输入格式
Each input file contains one test case.For each case,the first line contains two integers N
(≤100000)and C,where N is the number of records and C is the column that you are supposed to
sort the records with.Then N lines follow,each contains a record of a student.A student's record
consists of his or her distinct ID (a 6-digit num ber), name (a string with no more than 8 characters
without space),and grade(an integer between O and 100,inclusive).
输出格式
For each test case,output the sorting result in N lines.That is,if C=1 then the records must be
sorted in increasing order according to ID's;if C= 2 then the records must be sorted in
non-decreasing order according to names;and if C = 3 then the records must be sorted in
non-decreasing order according to grades.If there are several students who have the same name or
grade,they must be sorted according to their IDs in increasing order.
(原题即为英文题)
输入样例1

31
000007 James 85
000010 Amy 90
000001 Zoe 60

输出样例1

000001 Zoe 60
000007 James 85
000010Amy 90

输入样例2

42
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98

输出样例2

000010Amy 90
000002James 98
000007 James 85
000001 Zoe 60

输入样例3

43
000007 James 85
000010 Amy90
000001 Zoe 60
000002 James 90

输出样例3

000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90

题意:

(题目简单也易理解)

给出N个考生的准考证号、姓名、分数,并输入参数C,要求按C的不同取值进行排序:
①C=1,则按准考证号从小到大排序。
②C=2,则按姓名字典序从小到大排序;若姓名相同,则按准考证号从小到大排序。
③C=3,则按分数从小到大排序;若分数相同,则按准考证号从小到大排序。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 10010;
struct Student {
    int id;
    char name[15];
    int grade;
}stu[maxn];
int n,k;
bool cmp1(Student a, Student b) {
    return a.id < b.id;
}
bool cmp2(Student a, Student b) {
    if (a.name != b.name) {
        return strcmp(a.name ,b.name)<0;
    }
    else return a.id < b.id;
}
bool cmp3(Student a, Student b) {
    if (a.grade != b.grade)
        return a.grade < b.grade;
    else return a.id < b.id;
}
int main() {
    scanf("%d", &n,&k);
    for (int i = 0; i < n; i++) {
        scanf("%d %s %d", &stu[i].id, &stu[i].name, &stu[i].grade);
    }
    switch(k) {
    case 1: sort(stu, stu + n, cmp1);
        break;
    case 2: sort(stu, stu + n,cmp2); 
        break;
    case 3: sort(stu, stu + n,cmp3); 
        break;
    default:
        break;
    }
    for (int i = 0; i < n; i++) {
        printf("%06d %s %d\n", stu[i].id, stu[i].name, stu[i].grade);
    }
    return 0;
}

 

posted @ 2021-05-06 16:31  银发制御  阅读(66)  评论(0)    收藏  举报