1028 List Sorting (25point(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
主要思路
- 每个成员的信息应该储存在结构体中,所有成员的总和就储存在结构体数组中。
struct node { int id; char name[10]; int grade; } member[100005];
- 题中有三种要求的排序方法,对于结构体排序,可以直接使用c++"algorithm"库中的sort函数,具体如何使用可以看看这篇文章:排序算法 | sort函数的使用。只是cmp函数的编写稍微麻烦一点,要分成c值不同的三种情况。排序完直接输出即可。
bool cmp(struct node x, struct node y) { switch (c) { case 1: return x.id < y.id; case 2: if (strcmp(x.name, y.name) != 0) return strcmp(x.name, y.name) < 0; return x.id < y.id; case 3: if (x.grade != y.grade) return x.grade < y.grade; return x.id < y.id; } }
🔺注意点: 如果和我一样,id使用int型变量储存,输出的时候记得一定是6位,不足要补全零。
完整AC代码如下:
//
// Created by LittleCat on 2020/2/13.
//
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int c;
struct node {
int id;
char name[10];
int grade;
} member[100005];
bool cmp(struct node x, struct node y) {
switch (c) {
case 1:
return x.id < y.id;
case 2:
if (strcmp(x.name, y.name) != 0)
return strcmp(x.name, y.name) < 0;
return x.id < y.id;
case 3:
if (x.grade != y.grade)
return x.grade < y.grade;
return x.id < y.id;
}
}
int main() {
int n;
scanf("%d %d", &n, &c);
for (int i = 0; i < n; i++)
scanf("%d %s %d", &member[i].id, member[i].name, &member[i].grade);
sort(member, member + n, cmp);
for (int i = 0; i < n; i++)
printf("%06d %s %d\n", member[i].id, member[i].name, member[i].grade);
}
end
欢迎关注个人公众号“ 鸡翅编程 ”,这里是认真且乖巧的码农一枚。
---- 做最乖巧的博客er,做最扎实的程序员 ----
旨在用心写好每一篇文章,平常会把笔记汇总成推送更新~