当前位置: 首页 > news >正文

华为OD机试 - 消消乐能量碰撞(Python/JS/C/C++ 新系统 100分)

华为OD机试 新系统 统一考试题库清单(持续收录中)以及考点说明(Python/JS/C/C++)。

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

一、题目描述

在一个充满魔法能量的消除游戏中,一排排不同颜色的能量球(代表不同质量/能量值)静止在网格中。当玩家触发消除机制时,相邻的
能量球会发生相互碰撞。

消除规则:

碰撞机制:当两个相邻的能量球相遇时,系统会根据它们的能量值(质量)进行判断。

强弱判定:如果两个能量球的能量值不同,能量值较低的那个球会被对手的能量波吞噬,从而消除。

同归于尽:如果两个能量球的能量值完全相同,它们会引发剧烈的能量湮灭反应,导致两者同时被消除。

幸存条件:只有能量值足够高且未发生碰撞(或碰撞后存活)的能量球,才能留在场上继续等待下一轮消除。

题目目标:

给定一排初始的能量球序列,请模拟上述消除过程,找出最终留在场上的所有能量球及其顺序。

约束:

能量球的个数不超过 1000 个,能量球的能量值是非负整数,最大不超过 10000

二、输入描述

输入为一行字符串,格式为

n a1,a2,a3,...,an

其中 n 表示能量球的数量,方括号内为初始能量球序列的数值列表。

三、输出描述

输出最终留在场上的所有能量球序列,以数组形式表示,格式为 b1,b2,…,bm。

四、测试用例

测试用例1:

1、输入

5
3,5,5,2,3

2、输出

3

3、说明

3 留下

5 > 3,留下 5

5 == 5,两个都消除

2 留下

3 > 2,最终留下 3

测试用例2:

1、输入

6
1,2,2,1,3,4

2、输出

4

3、说明

1

2 > 1 → 2

2 == 2 → 全部消失

1

3 > 1 → 3

4 > 3 → 4

最终输出 4。

五、解题思路

处理每个新能量球 current 时,只需要关心当前场上是否存在一个幸存球 survivor:

当前没有幸存球:current 直接留下。

  • current == survivor:两个球同时消除,场上为空。
  • current > survivor:原幸存球被消除,current 成为新幸存球。
  • current < survivor:新球被消除,原幸存球继续存在。

为什么只保存一个变量就够?

因为每次新球与当前幸存球碰撞后,结果只可能是:

  1. 留下其中一个;
  2. 两个都消失。

因此任意时刻场上最多只有一个有效幸存球,没有必要使用栈、队列或数组保存中间状态。

六、Python算法源码

importsysdefmain():lines=sys.stdin.read().splitlines()n=int(lines[0].strip())line=lines[1].strip()iflen(lines)>1else""has_survivor=Falsesurvivor=0ifn>0andline:nums=line.split(",")foriinrange(n):current=int(nums[i].strip())ifnothas_survivor:# 当前没有幸存球,# 新球直接成为当前幸存球。survivor=current has_survivor=Trueelifcurrent==survivor:# 两个能量球数值相同,# 两者同时消除,场上重新为空。has_survivor=Falseelifcurrent>survivor:# 新球能量更高,# 原幸存球被消除,新球成为新的幸存球。survivor=current# current < survivor 时:# 新球被原幸存球消除,因此不需要修改 survivor。ifhas_survivor:print(survivor)else:print("")if__name__=="__main__":main()

七、JavaScript算法源码

constfs=require('fs');constinput=fs.readFileSync(0,'utf8').split(/\r?\n/);constn=Number((input[0]||'').trim());constline=(input[1]||'').trim();lethasSurvivor=false;letsurvivor=0;if(n>0&&line.length>0){constnums=line.split(',');for(leti=0;i<n;i++){constcurrent=Number(nums[i].trim());if(!hasSurvivor){// 当前没有幸存球,// 新进入的球直接成为当前幸存球。survivor=current;hasSurvivor=true;}elseif(current===survivor){// 能量值完全相同,// 两个球同时消除。hasSurvivor=false;}elseif(current>survivor){// 新球能量更高,// 原幸存球被消除,新球成为幸存球。survivor=current;}// current < survivor 时:// 新球被消除,原 survivor 不变。}}console.log(hasSurvivor?survivor:'');

八、C算法源码

#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(void){intn;if(scanf("%d",&n)!=1){return0;}/* * 清理读取 n 之后直到当前行末尾的字符, * 防止下面的 fgets 直接读到残留的换行符。 */intch;while((ch=getchar())!='\n'&&ch!=EOF){}/* * n 最大为 1000,每个数最大 10000, * 加上逗号后 12000 字符空间已经足够。 */charline[12000];if(fgets(line,sizeof(line),stdin)==NULL){line[0]='\0';}inthasSurvivor=0;intsurvivor=0;/* * strtok 按照逗号切分输入数据。 * 同时把 \\r 和 \\n 作为分隔符, * 兼容不同系统的换行格式。 */char*token=strtok(line,",\r\n");for(inti=0;i<n&&token!=NULL;i++){intcurrent=atoi(token);if(!hasSurvivor){// 当前没有幸存球,新球直接留下。survivor=current;hasSurvivor=1;}elseif(current==survivor){// 两球能量相同,同归于尽。hasSurvivor=0;}elseif(current>survivor){// 新球更强,消除原幸存球,// 新球成为新的幸存球。survivor=current;}/* * current < survivor 时, * 新球被消除,因此 survivor 保持不变。 */token=strtok(NULL,",\r\n");}if(hasSurvivor){printf("%d\n",survivor);}else{printf("\n");}return0;}

九、C++算法源码

#include<iostream>#include<sstream>#include<string>#include<limits>usingnamespacestd;intmain(){intn;cin>>n;// 清除读取 n 后剩余的换行内容,// 防止 getline 直接读到一个空字符串。cin.ignore(numeric_limits<streamsize>::max(),'\n');string line;getline(cin,line);stringstreamss(line);boolhasSurvivor=false;intsurvivor=0;for(inti=0;i<n;i++){string token;// 每次读取一个以逗号分隔的能量值。getline(ss,token,',');intcurrent=stoi(token);if(!hasSurvivor){// 当前没有幸存球,// 新球直接成为当前幸存球。survivor=current;hasSurvivor=true;}elseif(current==survivor){// 能量相同,两球同时消除。hasSurvivor=false;}elseif(current>survivor){// 新球更强,// 原幸存球被消除,新球成为新的幸存球。survivor=current;}// current < survivor 时,// 新球被消除,原 survivor 不发生变化。}if(hasSurvivor){cout<<survivor<<'\n';}else{cout<<'\n';}return0;}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 新系统 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

http://www.jsqmd.com/news/1392909/

相关文章:

  • AIGC 数字人才培训|Prompt/AI 绘图 / AI 视频,一站式全技能掌握 - 武汉学历升学规划
  • 婴童亲肤舒润身体乳哪家好:【蜜妙诗】柔褪周身干痒感 - 17728098551
  • LangGraph核心:节点、边、状态的第一性原理
  • 2026年8月文山屋顶漏水维修哪家好?正规防水修缮科普指南 - 聪居到家
  • 【学习地图】语言语法类 · 文章索引
  • 2026年宁波专做财税公司GEO优化获客服务商推荐 - 品牌品鉴馆
  • 【华夏二十四节气|07】HarmonyOS 6.0.2(22) ArkTS 节气搜索实战:多字段匹配与四态闭环
  • 2026 厦门奢品回收科普:香奈儿包包出包标准流程指南 - 日常前沿快讯
  • CAN总线充电报文解析工具|国网充电桩与BMS通信协议分析软件(支持慢充+离线/实时双模式)
  • 2026年国内螺纹钢采购 认准评价稳定厂家选型参考 - 品牌品鉴馆
  • 专业简历模板库,免费获取不注册
  • C++初阶(长期更新)第2讲:类和对象(上)
  • 2026亳州想快速拿中专证从事医药行业?电大中专药剂专业招生,需工作证明 招生办电话多少?联系方式是多少? - 我叫小周
  • 企业微信 iPad 协议 SCRM 开发效果实测
  • AI 诊断工具普及,普通维修师傅还有饭吃吗?
  • 合肥包河区卫生间渗水渗到楼下,聊聊我的维修经历 - 趣闻早乐评
  • MANUS Metagloves Pro Haptic 接入 ROS 2:消息建模、QoS 与失联保护怎么设计
  • G-Helper打不开怎么办?3步自查快速修复华硕笔记本控制工具启动失败问题
  • 2026年上海浦东新区正规的全铝定制衣柜源头厂家客户口碑力荐 - 家居讯客
  • Mpp电力管哪家好?2026工程采购参考:Mpp顶管厂家推荐/Mpp直埋管厂家/Mpp管供应商/电力管供应商盘点 - 栗子测评
  • 面向对象编程入门:从类与对象到Java实践
  • MCP 是什么:Agent 如何通过标准协议连接工具和外部服务
  • 剪映AI智能剪辑技能|批量混剪脚本+OpenClaw与Codex本地部署教程|自媒体高效创作源码
  • 用 ASP.NET 搭一个地方特产商城:54125 大理特色产品销售平台实战梳理
  • LLM在反汇编任务中的应用研究:文献调研进展与后续规划汇报
  • YOLOv8自瞄项目实战解读:从看见敌人到扣动扳机的15毫秒
  • 小程序开发公司和小程序搭建平台有什么区别?费用、周期和服务边界对比
  • 婴童亲肤舒润身体乳哪家好:【蜜妙诗】舒缓肤底紧绷感 - 18002239949
  • Day13 unitree_G1人形机器人传输问题
  • 2026年日本FBA货代哪家好?从空派海派到整柜的渠道选择货运公司指南推荐亿航 - 栗子测评