题目描述
excel表格可以按任意一列排序,我们需要实现这种功能
输入
第一行:N(<=100000,有多少条数据) C(排序的列)
之后N行:id(6位数的数字) name(姓名,不超过8个字符) score(分数0~100)
输出
输出N行结果,如果C=1,按id排序,C=2按name排序,C = 3按score排序
解题思路
这道题就是排序问题,根据C的值来判断排序规则。需要注意的是当按名字和分数排序时,如果值相同时按id排序。并且为了保证时间,将名字存储用char数组而不用string数组,并且插入数组的大小超过8;
代码
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
struct Student {
int id;
char name[9];
int score;
};
static bool cmp1(Student s1, Student s2) {
return s1.id < s2.id;
}
static bool cmp2(Student s1, Student s2) {
if(strcmp(s1.name, s2.name) == 0) return s1.id < s2.id;
return strcmp(s1.name, s2.name) <= 0;
}
static bool cmp3(Student s1, Student s2) {
if(s1.score==s2.score)return s1.id<s2.id;
return s1.score < s2.score;
}
int main() {
int n, c;
scanf("%d%d",&n,&c);
vector<Student> students(n);
for (int i = 0; i < n; i++) {
scanf("%d %s %d",&students[i].id , students[i].name,&students[i].score);
}
switch (c)
{
case 1:
sort(students.begin(), students.end(), cmp1);
break;
case 2:
sort(students.begin(), students.end(), cmp2);
break;
case 3:
sort(students.begin(), students.end(), cmp3);
break;
default:
break;
}
for (int i = 0; i < n; i++) {
printf("%06d %s %d\n", students[i].id, students[i].name ,students[i].score );
}
return 0;
}
网友评论