PAT A1028.List Sorting
Time Limit: 200ms Memory Limit:65636 KB
题目描述
Excel can sort records according to any column.Now you are supposed to imitate this
function.
输入格式
Each input file contains one test case.For each case,the first line contains two integers N
(≤100000)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 num ber), name (a string with no more than 8 characters
without space),and grade(an integer between O and 100,inclusive).
输出格式
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 IDs in increasing order.
(原题即为英文题)
输入样例1
31 000007 James 85 000010 Amy 90 000001 Zoe 60
输出样例1
000001 Zoe 60 000007 James 85 000010Amy 90
输入样例2
42 000007 James 85 000010 Amy 90 000001 Zoe 60 000002 James 98
输出样例2
000010Amy 90 000002James 98 000007 James 85 000001 Zoe 60
输入样例3
43 000007 James 85 000010 Amy90 000001 Zoe 60 000002 James 90
输出样例3
000001 Zoe 60 000007 James 85 000002 James 90 000010 Amy 90
题意:
(题目简单也易理解)
给出N个考生的准考证号、姓名、分数,并输入参数C,要求按C的不同取值进行排序:
①C=1,则按准考证号从小到大排序。
②C=2,则按姓名字典序从小到大排序;若姓名相同,则按准考证号从小到大排序。
③C=3,则按分数从小到大排序;若分数相同,则按准考证号从小到大排序。
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 10010; struct Student { int id; char name[15]; int grade; }stu[maxn]; int n,k; bool cmp1(Student a, Student b) { return a.id < b.id; } bool cmp2(Student a, Student b) { if (a.name != b.name) { return strcmp(a.name ,b.name)<0; } else return a.id < b.id; } bool cmp3(Student a, Student b) { if (a.grade != b.grade) return a.grade < b.grade; else return a.id < b.id; } int main() { scanf("%d", &n,&k); for (int i = 0; i < n; i++) { scanf("%d %s %d", &stu[i].id, &stu[i].name, &stu[i].grade); } switch(k) { case 1: sort(stu, stu + n, cmp1); break; case 2: sort(stu, stu + n,cmp2); break; case 3: sort(stu, stu + n,cmp3); break; default: break; } for (int i = 0; i < n; i++) { printf("%06d %s %d\n", stu[i].id, stu[i].name, stu[i].grade); } return 0; }

浙公网安备 33010602011771号