7-37 模拟EXCEL排序 (25 分)(思路+详解+超时解决 兄弟们冲呀呀呀呀呀呀)

一:题目

===================================================================

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)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值