概述
1028 List Sorting (25 point(s))
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条信息,按照要求进行排序:1表示按id非递减排序;2表示按照name非递减排序,如果相等则按id非递减排序;3表示按照grade非递减排序,如果相等则按照id非递减排序
解题思路
先构造结构体数组,存储id,name,grade,再分别构造三个满足上述排序要求的比较方式,输入数据后,依照要求对结构体数组进行排序,最后直接输出即可
代码
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct info {
int id;
char name[10];
int grade;
}Stu[100005];
bool cmp1(info a, info b) {//按学id递增排序
return a.id < b.id;
}
bool cmp2(info a, info b) {//按name递增排序,如果name相等,则按id递增排序
if (strcmp(a.name, b.name) != 0) return strcmp(a.name, b.name) < 0;
else return a.id < b.id;
}
bool cmp3(info a, info b) {//按grade排序,如果grade相等,则按id递增排序
if (a.grade != b.grade) return a.grade < b.grade;
else return a.id < b.id;
}
int main()
{
int N, i, C;
int ret = scanf("%d %d", &N, &C);
for (i = 0; i < N; ++i) {
ret = scanf("%d %s %d", &Stu[i].id, Stu[i].name, &Stu[i].grade);
}
if (C == 1) {
sort(Stu, Stu + i, cmp1);
} else if (C == 2) {
sort(Stu, Stu + i, cmp2);
} else {
sort(Stu, Stu + i, cmp3);
}
for (i = 0; i < N; ++i) {
printf("%06d %s %dn", Stu[i].id, Stu[i].name, Stu[i].grade);
}
return 0;
}
最后
以上就是认真自行车为你收集整理的PAT甲级1028(列表排序) 1028 List Sorting (25 point(s)) 的全部内容,希望文章能够帮你解决PAT甲级1028(列表排序) 1028 List Sorting (25 point(s)) 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复