华为OD机试真题——洞穴探险(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 A卷 200分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《洞穴探险》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C

GO


题目名称:洞穴探险


  1. 知识点:字符串处理、正则匹配(或栈操作)、逻辑判断
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 限定语言:不限

题目描述

某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远足迹位置。

坐标规则

  1. 坐标格式为 (x,y),例如 (1,2)(100,200),其中 0 < x < 10000 < y < 1000
  2. 非法坐标包括以下情况:
    • 数字前导零(如 (01,1)(1,01));
    • 坐标值为0或超出范围(如 (0,100))。

距离计算

  • 总部坐标为 (0,0),某位置 (x,y) 的相对距离为 ( x^2 + y^2 )。
  • 若两个坐标距离相同,则以第一次出现的坐标为准。
  • 若所有坐标均非法,输出 (0,0)

输入描述
一行字符串,表示记录仪中的数据(可能包含非坐标字符)。例如:

ferga13fdsf3(100,200)f2r3rfasf(300,400)  

输出描述
最远足迹坐标,如:

(300,400)  

示例

  • 输入:ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)
    输出:(5,10)(合法坐标中距离最大)
  • 输入:asfefaweawfaw(0,1)fe
    输出:(0,0)(坐标非法)

备注
无需处理嵌套括号(如 sfsdfsd((1,2)))。


Java

问题分析

题目要求从输入字符串中提取所有合法的坐标,并找到距离总部(0,0)最远的坐标。若所有坐标均非法,则返回(0,0)。合法坐标需满足以下条件:

  1. 格式为(x,y),其中x和y为数字且无前导零(除非数字本身为0,但x和y必须大于0且小于1000)。
  2. 0 < x < 1000,0 < y < 1000。

解题思路

  1. 正则匹配:使用正则表达式提取所有可能的坐标。
  2. 合法性验证
    • 检查x和y是否有前导零。
    • 检查x和y的数值范围是否合法。
  3. 计算距离:对合法坐标计算其到总部(0,0)的欧氏距离平方(x² + y²),记录最大距离对应的坐标。
  4. 处理边界:若无合法坐标,返回(0,0)。

代码实现

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String input = scanner.nextLine();scanner.close();Pattern pattern = Pattern.compile("\\((\\d+),(\\d+)\\)"); // 匹配(x,y)格式Matcher matcher = pattern.matcher(input);int maxDistance = -1;String maxCoordinate = null;while (matcher.find()) {String xStr = matcher.group(1); // 提取x部分字符串String yStr = matcher.group(2); // 提取y部分字符串// 检查前导零:若长度>1,则首字符不能为0boolean xValid = (xStr.length() == 1) || (xStr.length() > 1 && xStr.charAt(0) != '0');boolean yValid = (yStr.length() == 1) || (yStr.length() > 1 && yStr.charAt(0) != '0');if (!xValid || !yValid) {continue;}// 转换为整数并验证范围int x = Integer.parseInt(xStr);int y = Integer.parseInt(yStr);if (x <= 0 || x >= 1000 || y <= 0 || y >= 1000) {continue; // 数值非法}// 计算距离int distance = x * x + y * y;if (distance > maxDistance) {maxDistance = distance;maxCoordinate = "(" + x + "," + y + ")"; // 更新最大坐标}}System.out.println(maxCoordinate != null ? maxCoordinate : "(0,0)");}
}

代码解析

  1. 正则匹配Pattern.compile("\\((\\d+),(\\d+)\\)") 匹配形如(x,y)的字符串,其中\\d+表示一个或多个数字。
  2. 提取坐标matcher.find()循环遍历所有匹配的坐标,group(1)group(2)分别提取x和y的字符串形式。
  3. 前导零检查:若x或y的字符串长度大于1且首字符为0,视为非法。
  4. 数值范围检查:将x和y转换为整数后,检查是否满足0 < x < 1000和0 < y < 1000。
  5. 距离计算:对合法坐标计算x² + y²,并更新最大距离及对应坐标。
  6. 结果输出:若无合法坐标,输出(0,0),否则输出最大距离对应的坐标。

示例测试

  1. 输入ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)
    输出(5,10)
    解释:合法坐标有(3,10)、(3,4)、(5,10),最大距离为5² + 10² = 125。

  2. 输入asfefaweawfaw(0,1)fe
    输出(0,0)
    解释:坐标(0,1)中x=0非法,无合法坐标。

  3. 输入(01,2)(100,02)(100,999)
    输出(100,999)
    解释:前两个坐标因前导零或数值非法被过滤,第三个坐标合法且距离最大。

综合分析

  1. 时间复杂度:O(n),其中n为输入字符串长度。正则匹配和遍历均为线性复杂度。
  2. 空间复杂度:O(1),仅需存储临时变量。
  3. 优势
    • 高效性:正则表达式快速定位坐标,避免逐字符遍历。
    • 鲁棒性:严格校验前导零和数值范围,确保合法坐标正确性。
  4. 适用性:完美处理题目约束条件,适用于大范围输入数据。

python

问题分析

题目要求从输入字符串中提取所有合法的坐标,并找到距离总部(0,0)最远的坐标。若所有坐标均非法,则返回(0,0)。合法坐标需满足以下条件:

  1. 格式为(x,y),其中x和y为数字且无前导零(除非数字本身为0,但x和y必须大于0且小于1000)。
  2. 0 < x < 1000,0 < y < 1000。

解题思路

  1. 正则匹配:使用正则表达式提取所有可能的坐标。
  2. 合法性验证
    • 检查x和y是否有前导零。
    • 检查x和y的数值范围是否合法。
  3. 计算距离:对合法坐标计算其到总部(0,0)的欧氏距离平方(x² + y²),记录最大距离对应的坐标。
  4. 处理边界:若无合法坐标,返回(0,0)。

代码实现

import redef find_farthest_coordinate(input_str):max_distance = -1max_coord = Nonepattern = re.compile(r'\((\d+),(\d+)\)')  # 正则匹配坐标格式for match

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式之职责链模式详解

Java设计模式之职责链模式详解 一、职责链模式核心思想 核心目标&#xff1a;将请求的发送者与接收者解耦&#xff0c;使多个对象都有机会处理请求。这些处理者形成链式结构&#xff0c;请求沿链传递直到被处理或到达链尾&#xff0c;如政府审批层层上报机制。 二、职责链模式…

解决WPF短暂的白色闪烁(白色闪屏)

在 WPF 应用程序启动时出现 短暂的白色闪烁&#xff08;白色闪屏&#xff09;&#xff0c;通常是由于以下原因导致的&#xff1a; 主要原因 WPF 默认窗口背景是白色&#xff0c;在加载 UI 之前会短暂显示白色背景。 解决方案 设置窗口背景为透明或黑色&#xff08;推荐&…

《Python基础》第1期:人生苦短,我用Python

介绍 Python 在英语中是蟒蛇的意思&#xff0c;它的 logo 也是两条蟒蛇缠绕在一起。 然而 Python 和蟒蛇实际上没有半点关系。 Python 是由荷兰程序员 Guido van Rossum&#xff08;因为其名字的前三个字母“gui”是中文“龟”的拼音&#xff0c;所以江湖人称“龟叔”&#x…

DiT、 U-Net 与自回归模型的优势

DiT 相对于 U-Net 的优势 全局自注意力 vs. 局部卷积 U-Net 依赖卷积和池化/上采样来逐层扩大感受野&#xff0c;捕捉全局信息需要堆叠很多层或借助跳跃连接&#xff08;skip connections&#xff09;。DiT 在每个分辨率阶段都用 Transformer 模块&#xff08;多头自注意力 ML…

怎么查找idea插件的下载位置,并更改

长期使用 IntelliJ IDEA 时&#xff0c;默认存储在 C 盘的配置文件会持续生成大量缓存和日志文件&#xff0c;可能导致系统盘空间不足。通过修改默认配置文件存储位置&#xff0c;可以有效释放 C 盘空间并提升系统性能。 1&#xff0c;先找到自己idea的下载目录&#xff0c;再打…

IoT/HCIP实验-1/物联网开发平台实验Part2(HCIP-IoT实验手册版)

文章目录 概述产品和设备实例的产品和设备产品和设备的关联单个产品有多个设备为产品创建多个设备产品模型和物模型设备影子&#xff08;远程代理&#xff09; 新建产品模型定义编解码插件开发编解码插件工作原理消息类型与二进制码流添加消息&#xff08;数据上报消息&#xf…

15.进程间通信(一)

一、进程间通信介绍 进程间通信目的&#xff1a; 数据传输&#xff1a;一个进程需要将它的数据发送给另⼀个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xf…

05-jenkins学习之旅-vue前项目部署实践

1、创建被管理项目 2、构建流程说明 jenkins其实就是将服务部署拆分成了&#xff1a; 1、拉取代码(git) 2、打包编译(npm install) 3、自定义脚本(dist复制、执行启动脚本) 4、部署成功后的一些通知等 3、demo配置 3.1、General 3.2 源码管理 添加用户名密码方式如下图 3.2…

服务器中分布式存储数据技术都包含哪些内容?

随着大数据时代的到来&#xff0c;企业和组织对于服务器的存储要求也在不断地增高&#xff0c;传统的存储架构已经无法满足一些大规模的数据存储和处理需求&#xff0c;分布式存储技术应运而生&#xff0c;成为了大数据存储的重要基础设施&#xff0c;下面&#xff0c;就来介绍…

从比分滚动到数据革命:体育数据如何重构我们的观赛体验?

当凌晨三点的欧冠决赛与闹钟冲突时&#xff0c;当世界杯小组赛因时差难以全程跟进时&#xff0c;当代体育迷早已不再依赖电视直播 —— 打开手机里的比分网&#xff0c;实时跳动的体育大数据正构建着全新的观赛宇宙。这些曾经被视为 "辅助工具" 的平台&#xff0c;如…

vue2使用element中多选组件el-checkbox-group,数据与UI更新不同步

问题描述 使用element多选checkbox组件&#xff0c;点击勾选取消勾选&#xff0c;视图未变化&#xff0c;再次点击表单其他元素&#xff0c;多选组件勾选状态发生变化&#xff0c;视图和数据未同步 第一次尝试&#xff1a;再el-checkbox-group多选父组件上增加点击事件&…

CodeTop之LRU缓存

题目链接 146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 我们使用双向链表哈希表的形式来模拟缓存机制 首先我们要自己实现一个双链表, 自己写一个内部类, 这个内部类记录了key,value,prev,next(前驱和后继), 后续我们就通过这个内部类来构造双…

PyQt学习系列11-综合项目:多语言文件管理器

PyQt学习系列笔记&#xff08;Python Qt框架&#xff09; 第十一课&#xff1a;综合项目 - 多语言文件管理器 &#xff08;原课程规划中的第十五课&#xff0c;按用户要求调整为第十一课&#xff09; 课程目标 综合运用PyQt框架开发一个支持多语言的文件管理器实现以下核心功…

【Ubuntu修改串口延时(Latency Timer)为1毫秒(设备拔插或系统重启后自动生效)】

Ubuntu修改串口延时Latency Timer为1毫秒-设备拔插或系统重启后自动生效 在Ubuntu系统中&#xff0c;串口设备的延时参数(latency_timer)可以通过udev规则永久修改。以下是完整步骤&#xff1a; 创建udev规则文件 sudo vim /etc/udev/rules.d/99-ftdi-low-latency.rules添加以…

OpenCV CUDA模块图像处理------颜色空间处理之GPU 上交换图像的通道顺序函数swapChannels()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于在 GPU 上交换图像的通道顺序&#xff08;例如将 BGR 图像转为 RGB&#xff09;。 它适用于多通道图像&#xff08;如 3 通道或 4 通道…

Linux Ubuntu24.04配置安装MySQL8.4.5高可用集群主从复制!

MySQL 主从复制&#xff08;Replication&#xff09;是实现数据高可用、读写分离及异地容灾的核心机制之一。主库写、从库读&#xff0c;提升并发能力&#xff1b;读写分离&#xff0c;减轻主库压力。 本地 windows 系统有一个Linux Ubuntu子系统&#xff0c;版本为Ubuntu 24.…

R基于逻辑回归模型实现心脏病检测及SHAP值解释项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 心血管疾病是全球范围内导致死亡的主要原因之一&#xff0c;每年有数百万人因此失去生命。在众多的…

嵌入式学习笔记 -函数嵌套时以及异常响应时,LR使用的具体过程

函数嵌套时以及异常响应时&#xff0c;寄存器LR的作用存在显著区别&#xff0c;理解这个问题对于理解freeRTOS底层代码的实现大有帮助&#xff0c;具体使用过程如下&#xff1a; 一 函数嵌套时的LR使用的具体过程 在ARM架构(特别是M0处理器)中&#xff0c;函数嵌套调用时LR(L…

Java String函数的使用

文章目录 String字符串比较字符串查找转化字符串替换字符串拆分字符串截取&#xff08;常用&#xff09;字符串的不可变性 String str本来是字符串常量的引用&#xff0c;应该打印地址&#xff0c;但是编译器重写了toString方法&#xff0c;所以打印hello String 的构造方法 …

Oracle 11G RAC重启系统异常

vmware安装centos7环境部署Oracle RAC (11.2.0.4) 部署时所有资源情况都是正常的&#xff0c;关机重启虚拟机后集群资源状态异常&#xff0c;请教CSDN大佬 – 部署规划 域名地址备注rac16192.168.31.16rac17192.168.31.17rac16vip192.168.31.26viprac17vip192.168.31.27vip…