发布时间:2026/9/7 2:26:27
2026华为OD面试题018:智能成绩表 题目描述小明来到某学校当老师需要将学生按考试总分或单科分数进行排名你能帮帮他吗输入描述第 1 行输入两个整数学生人数 n 和科目数量 m。0 n 1000 m 10。第 2 行输入 m 个科目名称彼此之间用空格隔开。科目名称只由英文字母构成单个长度不超过 10 个字符。科目的出现顺序和后续输入的学生成绩一一对应不会出现重复的科目名称。第 3 行开始的 n 行每行包含一个学生的姓名和该生 m 个科目的成绩空格隔开学生不会重名。学生姓名只由英文字母构成长度不超过 10 个字符。成绩是 0 到 100 的整数依次对应第 2 行中输入的科目。末尾一行输入用作排名的科目名称。若科目不存在则按总分进行排序。输出描述输出一行按成绩排序后的学生名字空格隔开。成绩相同时按姓名字典序升序排列。原题文件在输出描述成绩相处截断这里按常见题型补全为成绩相同时按姓名字典序升序排列。排序方向按常见排名习惯取降序分数高的在前。示例 1输入3 2 yuwen shuxue fangfang 95 90 xiaohong 88 95 xiaoxin 90 90 shuxue输出xiaohong fangfang xiaoxin示例 2科目不存在按总分排输入3 2 yuwen shuxue fangfang 95 90 xiaohong 88 95 xiaoxin 90 90 english输出fangfang xiaohong xiaoxin讲个故事班主任老李的排名难题老李刚接手三年级二班校长丢来一张成绩表让他排个名。按数学成绩排。校长撂下一句话就走了。老李一看fangfang 和 xiaoxin 数学都考了 90这谁排前面挠了半天头末尾按姓名拼音排fangfang 在 xiaoxin 前面搞定。结果第二天校长又改口按英语排。老李翻遍成绩表压根没有英语这科。那咋办按总分排呗。说白了这道题就是模拟老李的整个排榜过程指定科目就按科目排科目不存在就按总分排同分看名字。核心原理一次自定义排序整道题就一个核心动作排序。难点全在比较器上。比较器有两条规则按优先级从高到低按排名分数降序。分数高的排前面。分数相同时按姓名字典序升序。名字小的排前面。排名分数怎么定看末尾一行输入的科目名如果这科在科目表里排名分数就是该科成绩如果这科不存在排名分数就是总分所有科目之和所以关键是建一张科目名到科目下标的映射表查一下就知道按哪科排。查不到就退化为总分排序。拿示例 1 走一遍。按 shuxue 排三人数学成绩分别是 fangfang 90、xiaohong 95、xiaoxin 90。降序排xiaohong 95 分最高排第一。剩下两人都是 90按名字升序fangfang 在 xiaoxin 前面。最终输出xiaohong fangfang xiaoxin。换成示例 2english 这科不存在就按总分。三人总分 fangfang 185、xiaohong 183、xiaoxin 180降序就是fangfang xiaohong xiaoxin。怎么实现读入 n、m读入 m 个科目名建一张科目名到下标的映射读入 n 个学生每人存姓名、各科成绩顺手算出总分读入排名科目名查映射查到用对应科目成绩查不到用总分自定义排序分数降序同分按姓名升序输出排序后的姓名空格隔开代码实现C 语言#includestdio.h#includestdlib.h#includestring.htypedefstruct{charname[16];intscores[12];inttotal;}Student;Student stu[105];charsubjects[12][16];intrankIdx;// -1 表示按总分排否则是科目下标intcmp(constvoid*a,constvoid*b){Student*x(Student*)a;Student*y(Student*)b;intsx(rankIdx-1)?x-total:x-scores[rankIdx];intsy(rankIdx-1)?y-total:y-scores[rankIdx];if(sx!sy)returnsy-sx;// 分数降序returnstrcmp(x-name,y-name);// 姓名升序}intmain(){intn,m;scanf(%d %d,n,m);for(inti0;im;i)scanf(%s,subjects[i]);for(inti0;in;i){scanf(%s,stu[i].name);stu[i].total0;for(intj0;jm;j){scanf(%d,stu[i].scores[j]);stu[i].totalstu[i].scores[j];}}charrankSub[16];scanf(%s,rankSub);rankIdx-1;for(inti0;im;i){if(strcmp(rankSub,subjects[i])0){rankIdxi;break;}}qsort(stu,n,sizeof(Student),cmp);for(inti0;in;i){printf(%s%c,stu[i].name,in-1?\n: );}return0;}C#includebits/stdc.husingnamespacestd;structStudent{string name;vectorintscores;inttotal;};intmain(){intn,m;cinnm;vectorstringsubjects(m);mapstring,intsubIdx;for(inti0;im;i){cinsubjects[i];subIdx[subjects[i]]i;}vectorStudentstu(n);for(inti0;in;i){cinstu[i].name;stu[i].scores.resize(m);stu[i].total0;for(intj0;jm;j){cinstu[i].scores[j];stu[i].totalstu[i].scores[j];}}string rankSub;cinrankSub;intrankIdxsubIdx.count(rankSub)?subIdx[rankSub]:-1;sort(stu.begin(),stu.end(),[](constStudenta,constStudentb){intsa(rankIdx-1)?a.total:a.scores[rankIdx];intsb(rankIdx-1)?b.total:b.scores[rankIdx];if(sa!sb)returnsasb;// 分数降序returna.nameb.name;// 姓名升序});for(inti0;in;i){coutstu[i].name(in-1?\n: );}return0;}Javaimportjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);intnsc.nextInt();intmsc.nextInt();String[]subjectsnewString[m];MapString,IntegersubIdxnewHashMap();for(inti0;im;i){subjects[i]sc.next();subIdx.put(subjects[i],i);}String[]namesnewString[n];int[][]scoresnewint[n][m];int[]totalnewint[n];for(inti0;in;i){names[i]sc.next();for(intj0;jm;j){scores[i][j]sc.nextInt();total[i]scores[i][j];}}StringrankSubsc.next();IntegerhitsubIdx.get(rankSub);finalintidx(hitnull)?-1:hit;Integer[]ordernewInteger[n];for(inti0;in;i)order[i]i;Arrays.sort(order,(a,b)-{intsa(idx-1)?total[a]:scores[a][idx];intsb(idx-1)?total[b]:scores[b][idx];if(sa!sb)returnsb-sa;// 分数降序returnnames[a].compareTo(names[b]);// 姓名升序});StringBuildersbnewStringBuilder();for(inti0;in;i){if(i0)sb.append( );sb.append(names[order[i]]);}System.out.println(sb);}}JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin});constlines[];rl.on(line,(line)lines.push(line.trim()));rl.on(close,(){const[n,m]lines[0].split(/\s/).map(Number);constsubjectslines[1].split(/\s/);constsubIdx{};subjects.forEach((s,i){subIdx[s]i;});conststudents[];for(leti0;in;i){constpartslines[2i].split(/\s/);constnameparts[0];constscoresparts.slice(1,1m).map(Number);consttotalscores.reduce((a,b)ab,0);students.push({name,scores,total});}constrankSublines[2n];constrankIdx(rankSubinsubIdx)?subIdx[rankSub]:-1;students.sort((a,b){constsa(rankIdx-1)?a.total:a.scores[rankIdx];constsb(rankIdx-1)?b.total:b.scores[rankIdx];if(sa!sb)returnsb-sa;// 分数降序returna.nameb.name?-1:(a.nameb.name?1:0);// 姓名升序});console.log(students.map(ss.name).join( ));});Pythonn,mmap(int,input().split())subjectsinput().split()sub_idx{s:ifori,sinenumerate(subjects)}students[]for_inrange(n):partsinput().split()nameparts[0]scoreslist(map(int,parts[1:1m]))students.append((name,scores,sum(scores)))rank_subinput().strip()rank_idxsub_idx.get(rank_sub,-1)defkey_fn(stu):name,scores,totalstu scoretotalifrank_idx-1elsescores[rank_idx]return(-score,name)# 分数取负实现降序姓名默认升序students.sort(keykey_fn)print( .join(s[0]forsinstudents))复杂度分析时间复杂度O(n * log n)主要是排序。读入和算总分是O(n * m)m 10 可视为常数空间复杂度O(n * m)存储所有学生成绩n 最大不到 100随便排。总结一下智能成绩表 自定义排序 科目映射查表。核心口诀排名科目查得到按单科排查不到按总分排分数降序同分按姓名升序建一张科目名到下标的映射是切换两种模式的关键这道题本身不难真正容易翻车的是同分处理忘了写姓名这一级比较器遇到同分用例就过不去。把比较器写全两条规则一个都不能少。你还在哪些排序题里栽过跟头欢迎在评论区聊聊。

相关新闻

2026/9/6 7:21:15

CANN/ops-math Math类接口

Math类接口 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math Math类aclnn接口列表aclnnAbsaclnnAcos&aclnnInplaceAcosaclnnAcosh&aclnnInplaceAcoshacln…

2026/9/7 15:45:13

TCP面试核心知识点全攻略:从三次握手到拥塞控制

1. 为什么TCP值得你花时间死磕TCP这块内容,几乎是每一场技术面试躲不过去的坎。无论是校招还是社招,无论是后端、客户端还是网络方向,面试官总喜欢从TCP切入,先问三次握手、四次挥手,再问流量控制、拥塞控制、粘包拆包…

2026/9/7 15:45:13

LeetCode 693:交替位二进制数的位运算判断技巧

1. 题目到底在问什么:交替位二进制数的本质刚看到“交替位二进制数”这个题名,很多朋友第一反应是“又要写一个判断函数”,但真正动手之后才发现,这题考的是对二进制位模式的理解和位运算的基本功。LeetCode 693 的要求很简单&…

2026/9/7 15:45:13

Windows mklink命令实战:目录联接两行搞定数据同步与路径迁移

在日常工作中,我经常遇到这样的需求:代码仓库放在 D 盘开发目录,但某个工具只认 C 盘固定路径;或者笔记本的文档散落在多个磁盘,想统一汇总到网盘同步目录;又或者是重装系统后,想把旧的用户配置…

2026/9/7 15:45:13

深入解析MCP Transport层:从Stdio到HTTP的选型与排坑指南

1. MCP的Transport到底在解决什么问题先说结论:MCP的Transport层是整个协议的地基,它决定了你的MCP server怎么被找到、怎么被连接、怎么传数据、怎么处理断连。前面几篇笔记我分别梳理了MCP的协议模型、工具调用链路和资源体系,这篇专门把Tr…

2026/9/7 15:40:13

2026 上下文缓存进阶:把前缀契约写进SPEC,MonkeyCode 云端跑通

2026 上下文缓存进阶:别把整本手册每次都重算一遍 老赵 6 人小队给省级税务局做政策问答助手。客户口头说系统提示和口径手册每次都带上,回答要快,别让窗口再等。 他们把 18 页口径、角色说明、禁答清单整包塞进每一次请求。Qwen 每次都把前缀…

2026/9/7 0:47:43

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/7 0:14:19

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/7 0:14:17

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/7 0:03:36

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

这次我们来看一个把目标检测算法和桌面端工具结合得很典型的项目:基于 YOLOv8 PyQt5 的麦穗稻穗检测识别系统。这个项目本身不是新概念,但它的价值在于落地形态很完整。YOLOv8 负责核心的麦穗稻穗目标检测,PyQt5 负责提供可视化的桌面交互界…

2026/9/7 0:03:36

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

简介:UL 1642是锂电池安全领域的重要规范,本中文版资源适合锂电池制造商、检测机构工程师及产品认证相关人员阅读,用于理解电池在设计与制造层面的安全要求、测试方法与合规要点。资源共1个PDF文件,压缩包大小834KB,便…

2026/9/7 0:03:36

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

简介:BS EN 13814-1:2019是英国采纳欧洲标准EN 13814-1:2019的正式版本,由BSI标准出版,重点规定游乐设施和游乐设备在设计与制造环节的安全准则,与BS EN 13814-2:2019、BS EN 13814-3:2019共同取代旧版BS EN 13814:2004。该标准面…

2026/9/6 11:40:10

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/6 19:33:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…