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随便排。总结一下智能成绩表 自定义排序 科目映射查表。核心口诀排名科目查得到按单科排查不到按总分排分数降序同分按姓名升序建一张科目名到下标的映射是切换两种模式的关键这道题本身不难真正容易翻车的是同分处理忘了写姓名这一级比较器遇到同分用例就过不去。把比较器写全两条规则一个都不能少。你还在哪些排序题里栽过跟头欢迎在评论区聊聊。

相关新闻

CANN/ops-math Math类接口

CANN/ops-math Math类接口

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

2026/7/12 19:48:03 阅读更多 →
TQVaultAE终极指南:如何快速上手泰坦之旅存档管理神器

TQVaultAE终极指南:如何快速上手泰坦之旅存档管理神器

TQVaultAE终极指南:如何快速上手泰坦之旅存档管理神器 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE 如果你是《泰坦之旅》的忠实玩家,一定会为背包…

2026/7/12 19:46:02 阅读更多 →
【仅限专业用户解锁】Midjourney动态模糊黄金参数矩阵:基于1,842组A/B测试验证的模糊强度-帧率映射表

【仅限专业用户解锁】Midjourney动态模糊黄金参数矩阵:基于1,842组A/B测试验证的模糊强度-帧率映射表

更多请点击: https://kaifayun.com 第一章:动态模糊在Midjourney中的核心价值与适用边界 动态模糊并非Midjourney原生支持的图像生成参数,而是通过提示词工程、后期合成或跨工具协同实现的视觉效果增强手段。其核心价值在于模拟运动轨迹、强…

2026/7/12 19:44:02 阅读更多 →

最新新闻

ChatGPT、Codex、Plus、Pro:AI 工作流编译器正在重构个人与团队的执行方式

ChatGPT、Codex、Plus、Pro:AI 工作流编译器正在重构个人与团队的执行方式

很多人使用 ChatGPT 和 Codex 时,仍然把它们当成两个工具。 ChatGPT 用来问答、写作、分析。 Codex 用来写代码、读项目、修 bug。 Plus 用来满足日常使用。 Pro 用来支持更高频、更复杂的任务。 这种理解没有错,但还停留在应用层。 如果从更深的系统角度…

2026/7/12 20:32:14 阅读更多 →
终极Windows游戏手柄兼容方案:ViGEmBus让你的任何设备变身专业控制器

终极Windows游戏手柄兼容方案:ViGEmBus让你的任何设备变身专业控制器

终极Windows游戏手柄兼容方案:ViGEmBus让你的任何设备变身专业控制器 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 还在为游戏手柄不兼容而烦恼…

2026/7/12 20:30:13 阅读更多 →
FastAPI Contrib MongoDB集成指南:像Django一样使用MongoDB模型

FastAPI Contrib MongoDB集成指南:像Django一样使用MongoDB模型

FastAPI Contrib MongoDB集成指南:像Django一样使用MongoDB模型 【免费下载链接】fastapi_contrib Opinionated set of utilities on top of FastAPI 项目地址: https://gitcode.com/gh_mirrors/fa/fastapi_contrib FastAPI Contrib是一个基于FastAPI的实用工…

2026/7/12 20:30:13 阅读更多 →
零基础转数据分析,应该先学什么?Excel、SQL、Python怎么排顺序

零基础转数据分析,应该先学什么?Excel、SQL、Python怎么排顺序

对于许多希望踏入数据分析领域的零基础学习者来说,面对众多的工具和技能,最常见的困惑就是:我应该从哪里开始?Excel、SQL、Python,这三者学习的先后顺序应该如何安排? 这篇文章将为你提供一个清晰、可操作的…

2026/7/12 20:28:13 阅读更多 →
BUUCTF [羊城杯 2020]easyre

BUUCTF [羊城杯 2020]easyre

考点:base64编码查壳,进入idaStr先base64转换,经过字符顺序交换和凯撒密码加密得到的字符串与Str2相同encode_one:标准base64encode_two:a3分别对应Str的str26-380-1239-5113-25encode_three:大写字母&…

2026/7/12 20:26:13 阅读更多 →
gggenomes实战案例:解析EMALE元件的基因组组织结构与进化关系

gggenomes实战案例:解析EMALE元件的基因组组织结构与进化关系

gggenomes实战案例:解析EMALE元件的基因组组织结构与进化关系 【免费下载链接】gggenomes A grammar of graphics for comparative genomics 项目地址: https://gitcode.com/gh_mirrors/gg/gggenomes gggenomes是R语言中一个强大的比较基因组学可视化工具&am…

2026/7/12 20:22:12 阅读更多 →

日新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

月新闻