===================================================================
Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。
输入格式:
输入的第一行包含两个正整数N(≤10
5
) 和C,其中N是纪录的条数,C是指定排序的列号。之后有 N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,保证没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩([0, 100]内的整数)组成,相邻属性用1个空格隔开。
输出格式:
在N行中输出按要求排序后的结果,即:当C=1时,按学号递增排序;当C=2时,按姓名的非递减字典序排序;当C=3时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
输入样例:
3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
输出样例:
000001 Zoe 60
000007 James 85
000010 Amy 90
===================================================================
这个题是用结构体存储 学号 姓名 成绩 三个变量,然后重写sort函数。
===================================================================
/**
思路:利用结构体存下,学号,姓名,成绩 ;然后重写sort函数
*/
#include<bits/stdc++.h>
using namespace std;
struct Node{
string id;
string name;
int grade;
};
bool sort_id( Node a,Node b ){
return a.id < b.id;
}
bool sort_name( Node a, Node b ){
if( a.name == b.name ) //当名字相同时,按照id进行排序
return a.id < b.id;
return a.name < b.name;
}
bool sort_grade( Node a, Node b ){
if( a.grade == b.grade)//当成绩相同时,按照id进行排序
return a.id < b.id;
return a.grade < b.grade;
}
int main(){
int N,M;
cin >> N >> M;
//创建结构体数组
Node *node = new Node[N];
for( int i = 0; i < N; i++ ){
cin >> node[i].id >> node[i].name >> node[i].grade;
}
if( M == 1)
sort(node,node+N,sort_id);
if( M == 2)
sort(node,node+N,sort_name);
if( M == 3)
sort(node,node+N,sort_grade);
for( int i = 0; i < N; i++ ){
cout << node[i].id << ’ ’ << node[i].name << ’ ’ << node[i].grade << endl;
}
}
补充超时解决:
1.这个需要卡时间,多提交几次就还可以卡过去。
2.或则将cout cin 改成printf 和 scanf
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
2.或则将cout cin 改成printf 和 scanf
[外链图片转存中…(img-bmCrICuM-1714257260798)]
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
[外链图片转存中…(img-lFoMFVn8-1714257260799)]