题目

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. jQuery的attr和prop属性

    <div id="div1"></div> attr: 首先是一个参数的attr. $("#div").attr("id&qu ...

  2. Ubuntu中设置共享文件夹

    1,设备--->共享文件夹--->共享文件夹 2,小加号---->添加路径(自己设置主机上任意的路径)--->设置名称(我的是gx)---->选中自动挂载和固定分配--- ...

  3. Spring Cloud sleuth with zipkin over RabbitMQ教程

    文章目录 Spring Cloud sleuth with zipkin over RabbitMQ demo zipkin server的搭建(基于mysql和rabbitMQ) 客户端环境的依赖 ...

  4. Tomcat7 启动慢的问题解决

    [问题] 由于上面标记部分,导致启动耗时将近160s,不能忍! [原因] 此于jvm环境配置有关,请打开jvm安装目录中jre/lib/security/java.security文件,找到secur ...

  5. Django入门4: ORM 数据库操作

    大纲 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ORM 字段 ...

  6. Netty(六):NioServerSocketChannel源码解析

    我们在Netty学习系列五的最后提出了一些问题还没得到回答,今天来通过学习NioServerSocketChannel的源码来帮我们找到之前问题的答案. 先看一下NioServerSocketChan ...

  7. SQL Server 字段和对应的说明操作(SQL Server 2005 +)

    为什么80%的码农都做不了架构师?>>>   添加说明 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value ...

  8. 使用cpplint检测代码规范

    0. cpplint - python脚本, google使用它作为自己的C++代码规范检查工具: 1. 安装 方法一: $sudo apt-get install python-pip $pip i ...

  9. 字符串后面空字符的问题(char*与string的转换)

    今天AC了不少题,困扰已久的Time limit error 也解决了,记住下次用STL容器的时候一定要清空容器. 其次是字符数组与字符串的浅谈. 字符数组是以'\0'结尾的,所以在字符数组赋值给字符 ...

  10. Eclipse 全部快捷一览表(具TM全)

    1. 编辑快捷键 编辑快捷键 介绍 psvm + Tab 生成main方法 sout + tab 生成输出语句 Ctrl+X / Ctrl + Y 删除一行 Ctrl+D 复制一行 Ctrl+/ 或 ...