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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值