1028 List Sorting (25point(s))

首先,先贴柳神的博客

https://www.liuchuo.net/ 这是地址

想要刷好PTA,强烈推荐柳神的博客,和算法笔记

题目原题

Excel can sort records according to any column. Now you are supposed to imitate this function.

Input Specification:

Each input file contains one test case. For each case, the first line contains two integers N (≤105) 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 number), name (a string with no more than 8 characters without space), and grade (an integer between 0 and 100, inclusive).

Output Specification:

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 ID's in increasing order.

Sample Input 1:

3 1
000007 James 85
000010 Amy 90
000001 Zoe 60 

Sample Output 1:

000001 Zoe 60
000007 James 85
000010 Amy 90 

Sample Input 2:

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

Sample Output 2:

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

Sample Input 3:

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

Sample Output 3:

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

题目大意

就是排序,给一个N,一个C,N是排序的个数,C排序的方式

注意点

① 因为C=2,和C=3是不降序,所以return的时候要加一个=

我的代码如下

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
struct student {
    char id[7], name[10];
    int grade;
};
bool cmp1(student a, student b) {
    return  strcmp(a.id, b.id)<0;
}
//cmp2,这里的name要加一个 <=   不加的话,会报错
bool cmp2(student a, student b) {
    return  a.name != b.name ? strcmp(a.name, b.name) <=0:strcmp(a.id, b.id) < 0 ;
}
//这里的a.grade <= b.grade 最好加一个<=,但是我实际测试,不加也能过
bool cmp3(student a, student b) {
    return  a.grade != b.grade ? a.grade <= b.grade:strcmp(a.id, b.id) < 0 ;
}
int main(void) {
    int N, C;
    scanf("%d%d", &N, &C);
    vector<student> data(N);
    for (int i = 0; i < N; i++)
        scanf("%s%s%d", data[i].id, data[i].name, &data[i].grade);
    if (C == 1)
        sort(data.begin(), data.end(), cmp1);
    else if (C == 2)
        sort(data.begin(), data.end(), cmp2);
    else if(C==3)
        sort(data.begin(), data.end(), cmp3);

    for(int i=0;i<N;i++)
        printf("%s %s %d\n", data[i].id, data[i].name,data[i].grade);
    return 0;
}
上一篇:PAT(甲级) 1013 Battle Over Cities (25point(s))


下一篇:1005 继续(3n+1)猜想 (25point(s))