题目

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 (≤10​5 ) 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,每个学生的信息包括ID(6位数字),姓名(长度最多为8的字符串,无空格),分数(0-100)。根据数字C的取值,对学生信息按照不同策略进行排序,最终输出排序后的学生信息:

C=1:按 ID 递增;

C=2:按姓名递增,如果同名,按ID递增;

C=3:按分数递增,如果同分,按ID递增。

思路分析

这不就是三种排序策略就完了吗?

  • 首先创建结构体 Student 保存学生信息,注意 name 字段不要用string!!!,否则你最后一个测试点会是 运行超时,实际是内存溢出!



    其实可以想想,题目给出说明姓名字段长度不超过10个字符,怎么可能没用呢,是吧!
  • 如何排序,因为我们使用sort()函数对整个结构体数组进行排序,自己实现的比较函数只能是这样int cmp(Student a, Student b),所以我们要把 C 定义成一个全局变量,然后在这个函数中根据 C的取值进行不同的逻辑实现,当然你也可以实现三个比较函数,但我觉得没有必要。

代码

题目比较简单,代码注释也挺详细,没什么好说的。有个地方需要注意:学号是6位数字,输出必须用printf("%06d", id)格式化。

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std; // 学生信息
struct Student {
int id, score;
// string name;
char name[10];
}stu[10001]; // 根据那个字段排序
int flag; // 自定义比较函数
int cmp(Student a, Student b) {
// 按照ID递增
if (flag == 1) return a.id < b.id;
// 按照姓名自增
else if (flag == 2) {
// 重名就比较ID
if (strcmp(a.name, b.name) == 0) return a.id < b.id;
return strcmp(a.name, b.name) <= 0;
} else {
// 按照分数递增,相同就比较ID
return a.score != b.score ? a.score < b.score : a.id < b.id;
}
} int main() { // N 个学生
int n;
// 根据哪个字段排序
cin >> n >> flag;
// 读入学生信息
for (int i = 0; i < n; ++i) {
// cin >> stu[i].id >> stu[i].name >> stu[i].score;
scanf("%d %s %d", &stu[i].id, stu[i].name, &stu[i].score);
}
// 排序
sort(stu, stu + n, cmp);
// 输出
for (int i = 0; i < n; ++i) {
// printf("%06d ", stu[i].id);
// cout << stu[i].name << " " << stu[i].score << endl;
printf("%06d %s %d\n", stu[i].id, stu[i].name, stu[i].score);
} return 0;
}

PAT 1028 List Sorting (25分) 用char[],不要用string的更多相关文章

  1. PAT 甲级 1028 List Sorting (25 分)(排序,简单题)

    1028 List Sorting (25 分)   Excel can sort records according to any column. Now you are supposed to i ...

  2. PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)

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

  3. 【PAT甲级】1028 List Sorting (25 分)

    题意: 输入一个正整数N(<=100000)和C(C属于{1,2,3}),接下来输入N行,每行包括学生的六位学号(习惯用string输入,因为可能有前导零),名字和成绩(正整数).输出排序后的信 ...

  4. 1028 List Sorting (25 分)

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

  5. PAT 甲级 1052 Linked List Sorting (25 分)(数组模拟链表,没注意到不一定所有节点都在链表里)

    1052 Linked List Sorting (25 分)   A linked list consists of a series of structures, which are not ne ...

  6. PAT 1028 List Sorting[排序][一般]

    1028 List Sorting (25)(25 分) Excel can sort records according to any column. Now you are supposed to ...

  7. PTA PAT排名汇总(25 分)

    PAT排名汇总(25 分) 计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,科 ...

  8. PAT 甲级 1032 Sharing (25 分)(结构体模拟链表,结构体的赋值是深拷贝)

    1032 Sharing (25 分)   To store English words, one method is to use linked lists and store a word let ...

  9. PAT 甲级 1078 Hashing (25 分)(简单,平方二次探测)

    1078 Hashing (25 分)   The task of this problem is simple: insert a sequence of distinct positive int ...

随机推荐

  1. python爬虫面试题集锦及答案

    1.爬取数据后使用哪个数据库存储数据的,为什么? - 2.你用过的爬虫框架或者模块有哪些?优缺点? - 3.写爬虫是用多进程好?还是多线程好? - 4.常见的反爬虫和应对方法? - 5.需要登录的网页 ...

  2. 博客搬家 - 记第四次搬家(hugo建站推送到谷歌云存储)

    写在前面,搬迁记录 记录我的博客这次搬家过程.我的博客之前经历过: wordpress github page Bitcron - 机制很不错(写完的博客自动保存到dropbox并发布,可惜搜索引擎的 ...

  3. MapReduce基本认识

    MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算. 主要由Split.Map.Partition.Sort.Combine(需要自己写).Merge.Reduce组成,一般来 ...

  4. SpringBoot项目集成Redis

    一.在pom文件中添加依赖 <!-- 集成redis --> <dependency> <groupId>org.springframework.boot</ ...

  5. 如何在 Inno Setup 中执行命令行的命令

    Pascal Scripting: Exec Prototype: function Exec(const Filename, Params, WorkingDir: String; const Sh ...

  6. 设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!

    忙,真忙 点赞再看,养成习惯,微信搜索『程序通事』,关注就完事了! 点击查看更多精彩的文章 这两个星期真是巨忙,年前有个项目因为各种莫名原因,一直拖到这个月才开始真正测试.然后上周又接到新需求,马不停 ...

  7. hdu_2570 迷障 贪心

    迷瘴 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  8. MongoDB学习(四):通过Java使用MongoDB

    环境配置 在Java项目中使用MongoDB,需要在项目中引入mongo.jar这个包.下载地址:下载 请尽量下载较新的版本,本文用的是2.10.1. 连接MongoDB public synchro ...

  9. “Too many texture interpolators would be used for ForwardBase pass”

    CGPROGRAM 下加一个 #pragma target 4.0 转载于:https://www.cnblogs.com/alps/p/7101092.html

  10. Nakamori Akina

    听过中森明菜的歌以后,一直想写点什么.恰好前段时间看过她的一个访谈https://b23.tv/av13810011,节目里已经39岁左右的她看着已经有些衰老,但是那份属于她的天真却保持的很好. 节目 ...