PAT_甲级_1028 List Sorting (25分) (C++)【scanf/printf输入输出】

目录

1,题目描述

题目大意

2,思路

注意

3,代码


1,题目描述

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

题目大意

按照某一列(ID,名字,成绩)将学生进行排序。若名字/分数相同按照ID的递增顺序排列;

2,思路

设计结构体node,存放string ID,name;int score;

将排序参考的列设置为flag;

设计排序函数cmp1,根据flag进行排序;

注意

  • 超时问题:若使用cin/cout,最后一个测试点会超时,需用scanf/printf代替,具体如下:

id.resize(6);name.resize(8)

scanf("%s%s%d", &id[0], &name[0], &score);

printf("%s %s %d\n", ans[i].ID.c_str(), ans[i].name.c_str(), ans[i].score);

补充:因为scanf是标准输入流,没有缓存区,需要预先分配空间,而cin是输入流,它使用了缓冲区。如果要使用scanf读入字符串,那就一定要事先为它申请足够的内存空间

3,代码

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

int flag;                                                   //排序的标准
struct node{
    string ID, name;
    int score;
};
bool cmp1(node a, node b){
    if(flag == 1){
        return a.ID < b.ID;
    }else if(flag == 2){
        if(a.name < b.name) return true;
        else if(a.name == b.name) return a.ID < b.ID;
    }else if(flag == 3){
        if(a.score < b.score) return true;
        else if(a.score == b.score) return a.ID < b.ID;
    }
    return false;
}
int main(){
//#ifdef ONLINE_JUDGE
//#else
//    freopen("1.txt", "r", stdin);
//#endif

    int n, score;
    node temp;
    string id, name;
    id.resize(6);name.resize(8);
    vector<node> ans;
    cin>>n>>flag;
    for(int i = 0; i < n; i++){
        scanf("%s%s%d", &id[0], &name[0], &score);      //scanf更快 注意输入格式
        ans.push_back({id, name, score});
    }
    sort(ans.begin(), ans.end(), cmp1);
    for(int i = 0; i < ans.size(); i++){
        printf("%s %s %d\n", ans[i].ID.c_str(), ans[i].name.c_str(), ans[i].score);//printf更快 注意输出格式
    }
    return 0;
}
发布了45 篇原创文章 · 获赞 5 · 访问量 2174

猜你喜欢

转载自blog.csdn.net/qq_41528502/article/details/104325504