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

华为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.xdnf.cn/news/654949.html

相关文章:

  • BGP配置命令详细框架
  • 营销推广需要解决哪些问题?
  • IP SSL证书:为IP地址提供安全加密的专业解决方案
  • 【论文解读】STaR:不用人类思维链指导,模型可以自我进化!
  • Go Web框架选型与实践:基于Gin的REST API开发指南
  • 【R语言科研绘图-最小二乘法】
  • 【混合动力能量管理新突破:负载识别优化策略深度解析与仿真实战】
  • [yolov11改进系列]基于yolov11引入级联群体注意力机制CGAttention的python源码+训练源码
  • 鸿蒙OSUniApp 实现带有滑动删除的列表#三方框架 #Uniapp
  • 基于GitHub Actions+SSH+PM2的Node.js自动化部署全流程指南
  • Nacos集群
  • 【向量数据库选型实战】FAISS vs Chroma vs Milvus vs Qdrant 全面对比
  • 【QT】QString和QStringList去掉空格的方法总结
  • day38python打卡
  • 构建版本没mac上传APP方法
  • 华为OD机试真题——猴子吃桃/爱吃蟠桃的孙悟空(2025B卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 【C++篇】list模拟实现
  • Qt qml Network error问题
  • 「读书报告」内网安全攻防
  • 每日算法-250526
  • GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【三】
  • 消防营区管理升级:豪越科技智能仓储与装备管理的力量
  • 【Java项目测试报告】:在线音乐平台(Online-Music)
  • 开发过的一个Coding项目
  • top查看 CPU使用情况
  • 【Java学习笔记】单例设计模式
  • C++23 std::start_lifetime_as:用于隐式生存期类型的显式生存期管理函数 (P2590R2)
  • Java网络编程中的I/O操作:从字节流到对象序列化
  • DJI上云API官方demo学习
  • JavaSE核心知识点04工具04-01(JDK21)