【华为OD机试|01】最远足迹(Java/C/Py/JS)

目录

一、题目介绍

1.1 题目描述

1.2 备注:

1.3 输入描述

1.4 输出描述

1.5 用例

二、Java代码实现

2.1 实现思路

2.2 详细代码

2.3 代码讲解:

三、C语言实现

3.1实现步骤

3.2 实现代码

3.3 代码详解

四、Python实现

4.1 实现步骤

4.2 代码实现

4.3 详细讲解

五、JS实现

5.1 实现步骤

5.2 详细代码

5.3详细讲解

六、总结


一、题目介绍

1.1 题目描述

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

  1. 仪器记录坐标时,坐标的数据格式为(x,y),如(1,2)、(100,200),其中0<x<1000,0<y<1000。同时存在非法坐标,如(01,1)、(1,01),(0,100)属于非法坐标。
  2. 设定探险队总部的坐标为(0,0),某位置相对总部的距离为:x*x+y*y。
  3. 若两个座标的相对总部的距离相同,则第一次到达的坐标为最远的足迹。
  4. 若记录仪中的坐标都不合法,输出总部坐标(0,0)。

1.2 备注:

不需要考虑双层括号嵌套的情况,比如sfsdfsd((1,2))。

1.3 输入描述

字符串,表示记录仪中的数据。

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

1.4 输出描述

字符串,表示最远足迹到达的坐标。

如: (300,400)

1.5 用例

输入ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)
输出(5,10)
说明记录仪中的合法坐标有3个: (3,10), (3,4), (5,10),其中(5,10)是相距总部最远的坐标, 输出(5,10)。
输入asfefaweawfaw(0,1)fe
输出(0,0)
说明记录仪中的坐标都不合法,输出总部坐标(0,0)。

二、Java代码实现

实现这个题目,需要解析字符串中的有效坐标,计算它们到总部 (0,0) 的距离,并找出最远的一个坐标。如果记录中的所有坐标都不合法,我们将返回总部坐标 (0,0)。

2.1 实现思路

实现步骤如下:

  1. 解析字符串:提取出所有合法的坐标。
  2. 验证坐标合法性:确保坐标满足格式要求,且 x 和 y 在 (0,1000) 之间。
  3. 计算距离:计算每个合法坐标到总部 (0,0) 的距离。
  4. 找出最远的坐标:在所有合法坐标中找出距离最大的那个。
  5. 处理异常情况:如果没有合法坐标,返回总部坐标 (0,0)。

2.2 详细代码

下面是具体实现代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class CaveExploration {public static void main(String[] args) {String input = "ferga13fdsf3(100,200)f2r3rfasf(300,400)";System.out.println(findFarthestCoordinate(input));}public static String findFarthestCoordinate(String input) {// 定义正则表达式以提取合法的坐标Pattern pattern = Pattern.compile("\\((\\d{1,3}),(\\d{1,3})\\)");Matcher matcher = pattern.matcher(input);String farthestCoordinate = "(0,0)";int maxDistance = 0;while (matcher.find()) {String xStr = matcher.group(1);String yStr = matcher.group(2);int x = Integer.parseInt(xStr);int y = Integer.parseInt(yStr);// 检查坐标是否合法if (isValidCoordinate(xStr, yStr, x, y)) {int distance = x * x + y * y;if (distance > maxDistance) {maxDistance = distance;farthestCoordinate = "(" + x + "," + y + ")";}}}return farthestCoordinate;}// 验证坐标是否合法private static boolean isValidCoordinate(String xStr, String yStr, int x, int y) {return x > 0 && x < 1000 && y > 0 && y < 1000 &&!xStr.startsWith("0") && !yStr.startsWith("0");}
}

2.3 代码讲解:

1. 字符串解析

在Java中,我们使用正则表达式提取字符串中的坐标。

Pattern pattern = Pattern.compile("\\((\\d{1,3}),(\\d{1,3})\\)");
Matcher matcher = pattern.matcher(input);

解析思路

  • 使用正则表达式 \\((\\d{1,3}),(\\d{1,3})\\) 匹配形如 (x,y) 的坐标,其中 x 和 y 是 1 到 3 位的数字。
  • matcher.find() 用于在输入字符串中查找所有符合正则表达式的子字符串。

2. 合法性验证

通过解析得到的字符串,进一步验证它们是否合法。

private static boolean isValidCoordinate(String xStr, String yStr, int x, int y) {return x > 0 && x < 1000 && y > 0 && y < 1000 &&!xStr.startsWith("0") && !yStr.startsWith("0");
}

验证思路

  • 坐标 x 和 y 必须在 (0,1000) 范围内。
  • 坐标字符串不能以 "0" 开头,除非它是单个 "0"。

3. 距离计算

计算每个合法坐标到总部 (0,0) 的距离。

通过这种方式,可以确保找出距离总部最远的合法坐标,并处理非法坐标和无坐标的情况。

三、C语言实现

使用C语言实现这个题目,我们需要解析字符串中的有效坐标,计算它们到总部 (0,0) 的距离,并找出最远的一个坐标。如果记录中的所有坐标都不合法,我们将返回总部坐标 (0,0)。

3.1实现步骤

  1. 解析字符串:提取出所有合法的坐标。
  2. 验证坐标合法性:确保坐标满足格式要求,且 x 和 y 在 (0,1000) 之间。
  3. 计算距离:计算每个合法坐标到总部 (0,0) 的距离。
  4. 找出最远的坐标:在所有合法坐标中找出距离最大的那个。
  5. 处理异常情况:如果没有合法坐标,返回总部坐标 (0,0)。

3.2 实现代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>// 判断是否是合法的坐标
int isValidCoordinate(char *xStr, char *yStr, int x, int y) {return x > 0 && x < 1000 && y > 0 && y < 1000 && (xStr[0] != '0' || strlen(xStr) == 1) && (yStr[0] != '0' || strlen(yStr) == 1);
}int main() {char input[] = "ferga13fdsf3(100,200)f2r3rfasf(300,400)";char *ptr = input;char xStr[4], yStr[4];int maxDistance = 0;char farthestCoordinate[10] = "(0,0)";while ((ptr = strstr(ptr, "(")) != NULL) {if (sscanf(ptr, "(%3[0-9],%3[0-9])", xStr, yStr) == 2) {int x = atoi(xStr);int y = atoi(yStr);if (isValidCoordinate(xStr, yStr, x, y)) {int distance = x * x + y * y;if (distance > maxDistance) {maxDistance = distance;sprintf(farthestCoordinate, "(%d,%d)", x, y);}}}ptr++;}printf("%s\n", farthestCoordinate);return 0;
}

3.3 代码详解

1. 字符串解析

在C语言中,我们使用 strstrsscanf 来解析字符串。

while ((ptr = strstr(ptr, "(")) != NULL) {if (sscanf(ptr, "(%3[0-9],%3[0-9])", xStr, yStr) == 2) {...}ptr++;
}

2.解析思路

  • 使用 strstr 查找字符串中第一个 ( 的位置。
  • 使用 sscanf 提取括号中的数字对,格式为 (%3[0-9],%3[0-9]),确保读取的数字不超过3位。
2. 合法性验证

通过解析得到的字符串,进一步验证它们是否合法。

int isValidCoordinate(char *xStr, char *yStr, int x, int y) {return x > 0 && x < 1000 && y > 0 && y < 1000 && (xStr[0] != '0' || strlen(xStr) == 1) && (yStr[0] != '0' || strlen(yStr) == 1);
}

验证思路

  • 坐标 x 和 y 必须在 (0,1000) 范围内。
  • 坐标字符串不能以 "0" 开头,除非它是单个 "0"。
3. 距离计算

计算每个合法坐标到总部 (0,0) 的距离。

int distance = x * x + y * y;

计算思路

  • 使用欧几里得距离的平方来比较不同坐标的远近,公式为 distance = x * x + y * y
4. 找出最远的坐标

在所有合法坐标中找出距离最大的那个。

if (distance > maxDistance) {maxDistance = distance;sprintf(farthestCoordinate, "(%d,%d)", x, y);
}

思路

  • 使用变量 maxDistance 记录最大距离,每次计算新的距离后与之比较,更新最大距离和最远坐标。

四、Python实现

使用Python实现这个题目同样需要解析字符串中的有效坐标,计算它们到总部 (0,0) 的距离,并找出最远的一个坐标。如果记录中的所有坐标都不合法,我们将返回总部坐标 (0,0)。

4.1 实现步骤

  1. 解析字符串:提取出所有合法的坐标。
  2. 验证坐标合法性:确保坐标满足格式要求,且 x 和 y 在 (0,1000) 之间。
  3. 计算距离:计算每个合法坐标到总部 (0,0) 的距离。
  4. 找出最远的坐标:在所有合法坐标中找出距离最大的那个。
  5. 处理异常情况:如果没有合法坐标,返回总部坐标 (0,0)。

4.2 代码实现

import redef find_farthest_coordinate(data):# 定义正则表达式以提取合法的坐标pattern = re.compile(r'\((\d{1,3}),(\d{1,3})\)')matches = pattern.findall(data)max_distance = 0farthest_coordinate = "(0,0)"for match in matches:x_str, y_str = matchx = int(x_str)y = int(y_str)# 检查坐标是否合法if is_valid_coordinate(x_str, y_str, x, y):distance = x * x + y * yif distance > max_distance:max_distance = distancefarthest_coordinate = f"({x},{y})"return farthest_coordinatedef is_valid_coordinate(x_str, y_str, x, y):# 验证坐标是否合法return 0 < x < 1000 and 0 < y < 1000 and \not (x_str.startswith("0") and len(x_str) > 1) and \not (y_str.startswith("0") and len(y_str) > 1)# 示例输入
input_data = "ferga13fdsf3(100,200)f2r3rfasf(300,400)"
print(find_farthest_coordinate(input_data))  # 输出: (300,400)

4.3 详细讲解

1. 字符串解析

在Python中,我们使用正则表达式提取字符串中的坐标。

pattern = re.compile(r'\((\d{1,3}),(\d{1,3})\)')
matches = pattern.findall(data)

解析思路

  • 使用正则表达式 \((\d{1,3}),(\d{1,3})\) 匹配形如 (x,y) 的坐标,其中 x 和 y 是 1 到 3 位的数字。
  • findall 方法返回所有匹配的坐标对。

2. 合法性验证

通过解析得到的字符串,进一步验证它们是否合法。

def is_valid_coordinate(x_str, y_str, x, y):return 0 < x < 1000 and 0 < y < 1000 and \not (x_str.startswith("0") and len(x_str) > 1) and \not (y_str.startswith("0") and len(y_str) > 1)

验证思路

  • 坐标 x 和 y 必须在 (0,1000) 范围内。
  • 坐标字符串不能以 "0" 开头,除非它是单个 "0"。
3. 距离计算

计算每个合法坐标到总部 (0,0) 的距离。

distance = x * x + y * y

计算思路

  • 使用欧几里得距离的平方来比较不同坐标的远近,公式为 distance = x * x + y * y
4. 找出最远的坐标

在所有合法坐标中找出距离最大的那个。

if distance > max_distance:max_distance = distancefarthest_coordinate = f"({x},{y})"

思路

  • 使用变量 max_distance 记录最大距离,每次计算新的距离后与之比较,更新最大距离和最远坐标。
5. 处理异常情况

如果没有合法坐标,最远的坐标默认为 (0,0)

max_distance = 0
farthest_coordinate = "(0,0)"

思路

  • 初始时将最远坐标设为 (0,0),如果找到合法坐标,更新为最远坐标。

通过上述步骤,可以在Python中实现解析字符串并找出距离总部最远的合法坐标,并处理非法坐标和无坐标的情况。

五、JS实现

使用JavaScript实现这个题目同样需要解析字符串中的有效坐标,计算它们到总部 (0,0) 的距离,并找出最远的一个坐标。如果记录中的所有坐标都不合法,我们将返回总部坐标 (0,0)。

5.1 实现步骤

  1. 解析字符串:提取出所有合法的坐标。
  2. 验证坐标合法性:确保坐标满足格式要求,且 x 和 y 在 (0,1000) 之间。
  3. 计算距离:计算每个合法坐标到总部 (0,0) 的距离。
  4. 找出最远的坐标:在所有合法坐标中找出距离最大的那个。
  5. 处理异常情况:如果没有合法坐标,返回总部坐标 (0,0)。

5.2 详细代码

function findFarthestCoordinate(data) {// 定义正则表达式以提取合法的坐标const pattern = /\((\d{1,3}),(\d{1,3})\)/g;let matches;let maxDistance = 0;let farthestCoordinate = "(0,0)";while ((matches = pattern.exec(data)) !== null) {const xStr = matches[1];const yStr = matches[2];const x = parseInt(xStr, 10);const y = parseInt(yStr, 10);// 检查坐标是否合法if (isValidCoordinate(xStr, yStr, x, y)) {const distance = x * x + y * y;if (distance > maxDistance) {maxDistance = distance;farthestCoordinate = `(${x},${y})`;}}}return farthestCoordinate;
}// 验证坐标是否合法
function isValidCoordinate(xStr, yStr, x, y) {return x > 0 && x < 1000 && y > 0 && y < 1000 &&!(xStr.startsWith("0") && xStr.length > 1) &&!(yStr.startsWith("0") && yStr.length > 1);
}// 示例输入
const inputData = "ferga13fdsf3(100,200)f2r3rfasf(300,400)";
console.log(findFarthestCoordinate(inputData));  // 输出: (300,400)

5.3详细讲解

1. 字符串解析

在JavaScript中,我们使用正则表达式提取字符串中的坐标。

const pattern = /\((\d{1,3}),(\d{1,3})\)/g;
let matches;

解析思路

  • 使用正则表达式 \((\d{1,3}),(\d{1,3})\) 匹配形如 (x,y) 的坐标,其中 x 和 y 是 1 到 3 位的数字。
  • pattern.exec(data) 用于在输入字符串中查找所有符合正则表达式的子字符串。

2. 合法性验证

通过解析得到的字符串,进一步验证它们是否合法。

function isValidCoordinate(xStr, yStr, x, y) {return x > 0 && x < 1000 && y > 0 && y < 1000 &&!(xStr.startsWith("0") && xStr.length > 1) &&!(yStr.startsWith("0") && yStr.length > 1);
}

验证思路

  • 坐标 x 和 y 必须在 (0,1000) 范围内。
  • 坐标字符串不能以 "0" 开头,除非它是单个 "0"。

3. 距离计算

计算每个合法坐标到总部 (0,0) 的距离。

const distance = x * x + y * y;

计算思路

  • 使用欧几里得距离的平方来比较不同坐标的远近,公式为 distance = x * x + y * y
4. 找出最远的坐标

在所有合法坐标中找出距离最大的那个。

if (distance > maxDistance) {maxDistance = distance;farthestCoordinate = `(${x},${y})`;
}

思路

  • 使用变量 maxDistance 记录最大距离,每次计算新的距离后与之比较,更新最大距离和最远坐标。
5. 处理异常情况

如果没有合法坐标,最远的坐标默认为 (0,0)

let maxDistance = 0;
let farthestCoordinate = "(0,0)";

思路

  • 初始时将最远坐标设为 (0,0),如果找到合法坐标,更新为最远坐标。

通过上述步骤,我们可以在JavaScript中实现解析字符串并找出距离总部最远的合法坐标,并处理非法坐标和无坐标的情况。

六、总结

在上述问题中,我们通过解析记录字符串找到距离总部 (0,0) 最远的合法坐标。我们分别使用了Java、C、Python和JavaScript四种语言实现了解决方案。

下期见啦~🥰

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

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

相关文章

项目实战系列三: 家居购项目 第六部分

文章目录 &#x1f308;Ajax检验注册名&#x1f308;Ajax添加购物车&#x1f308;上传与更新家居图片&#x1f308;作业布置&#x1f34d;会员登陆后不能访问后台管理&#x1f34d;解决图片冗余问题&#x1f34d;分页导航完善 &#x1f308;Ajax检验注册名 需求分析 注册会员时…

推动多模态智能模型发展:大型视觉语言模型综合多模态评测基准

随着人工智能技术的飞速发展&#xff0c;大型视觉语言模型&#xff08;LVLMs&#xff09;在多模态应用领域取得了显著进展。然而&#xff0c;现有的多模态评估基准测试在跟踪LVLMs发展方面存在不足。为了填补这一空白&#xff0c;本文介绍了MMT-Bench&#xff0c;这是一个全面的…

js获取字符串中超链接,并加样式跳转页面

效果图 主要代码&#xff1a;js this.$nextTick(() > {// 给循环出来的div标签加个id为let container document.getElementById("linkTo");container.innerHTML container.textContent.replace(/(https?:\/\/[^\s])/g, function (match) {var link documen…

【微前端-Single-SPA、qiankun的基本原理和使用】

背景 在实际项目中&#xff0c;随着日常跌倒导致的必然墒增&#xff0c;项目会越来越冗余不好维护&#xff0c;而且有时候一个项目会使用的其他团队的功能&#xff0c;这种跨团队不好维护和管理等等问题&#xff0c;所以基于解决这些问题&#xff0c;出现了微前端的解决方案。…

前端项目vue3/React使用pako库解压缩后端返回gzip数据

pako仓库地址&#xff1a;https://github.com/nodeca/pako 文档地址&#xff1a;pako 2.1.0 API documentation 外部接口返回一个直播消息或者图片数据是经过zip压缩的&#xff0c;前端需要把这个数据解压缩之后才可以使用&#xff0c;这样可以大大降低网络数据传输的内容&…

Depth Anything V1,V2论文解读

Depth Anything 引言Depth Anything V1标注方法学习标注图像发挥未标注图像的潜力语义辅助感知 Depth Anything V2总体框架流程 引言 在深度估计领域&#xff0c;单目深度估计&#xff08;Monocular Depth Estimation&#xff0c;MDE&#xff09;是指利用单个摄像头拍摄的图像…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十八)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 28 节&#xff09; P28《27.网络连接-Http请求数据》 案例&#xff1a; 这里不懂后端假设服务器的前端小伙伴就需要课程源码资料了…

深度之眼(二十五)——研究生学习计划安排

文章目录 一、前言二、结构安排和规划2.1 夯实基础2.2 分方向训练&#xff08;待&#xff09;2.3 进阶训练 三、其他 一、前言 课题组这边是需要对机器视觉有所要求吧&#xff0c;也就是CV方向。这一届研三师兄也都是在大厂拿到30W的年薪了&#xff0c;也是需要拥抱深度学习这…

java收徒 java辅导 java试用期辅导 java零基础学习

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末报名辅导&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家…

守护变电箱消防安全,全氟己酮自动灭火片该安装在哪个位置?

变电箱、配电柜、换电柜是电力设备的重要组成部分&#xff0c;安全性至关重要。但在使用过程中&#xff0c;容易受到电气、机械、环境等因素影响&#xff0c;出现接触不良、短路、漏电等安全隐患&#xff0c;从而引发火灾事故。为了及时防范火灾风险&#xff0c;提前安装一款能…

Vue中数组的【响应式】操作

在 Vue.js 中&#xff0c;当你修改数组时&#xff0c;Vue 不能检测到以下变动的数组&#xff1a; 当你利用索引直接设置一个项时&#xff0c;例如&#xff1a;vm.items[indexOfItem] newValue当你修改数组的长度时&#xff0c;例如&#xff1a;vm.items.length newLength 为…

Java基础(二)——数组,方法,方法重载

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

01_02_Mybatis的配置文件与基于XML的使用

1、引入日志 在这里我们引入SLF4J的日志门面&#xff0c;使用logback的具体日志实现&#xff1b;引入相关依赖&#xff1a; <!--日志的依赖--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version&g…

2024国内外音频转换器大盘点,盘点音乐剪辑的7个有效方法!

当遇到不支持的音乐文件时&#xff0c;您可能就会想要拥有一款优秀的音频转换器。当您想减小大量音乐文件以节省设备存储空间时&#xff0c;它也可以很好地帮上忙。如果您正在寻找这么一款音频转换器&#xff0c;那么&#xff0c;请不要错过这篇文章。一款顶尖的音频转换器不仅…

USB2.0学习1--基本概念

目录 1.USB概念 2.USB协议发展 3.USB接口类型 3.1 TYPE类型 3.2 Mini类型 3.3 Micro类型 4. USB体系结构和关键概念 4.1 USB工作原理 4.2 USB物理拓扑结构 4.3 USB逻辑拓扑结构 4.4 USB软件架构 4.5 USB数据流模型 4.5.1 USB设备端点 4.5.2 USB管道 4.6 USB即插…

网工内推 | 国企信息工程师,信息系统项目管理师优先,最高14薪

01 上海浦东软件园股份有限公司 &#x1f537;招聘岗位&#xff1a;信息化管理工程师 &#x1f537;岗位职责&#xff1a; 1. 根据公司战略、数字化总体架构规划和IT 技术趋势&#xff0c;制定信息化系统的规划与设计&#xff0c;并制定实施计划。 2. 统筹公司信息化系统管理…

Redis-实战篇-缓存击穿问题及解决方案

文章目录 1、缓存击穿2、常见的解决方案有两种&#xff1a;2.1、互斥锁2.2、逻辑过期2.3、两种方案对比 3、利用互斥锁解决缓存击穿问题3.1、ShopServiceImpl.java3.2、使用 jmeter.bat 测试高并发 4、利用逻辑过期解决缓存击穿问题 1、缓存击穿 缓存击穿问题 也叫 热点key问题…

<电力行业> - 《第4课:什么是电力?什么是发输变配用5环节?》

1 什么是电力&#xff1f; 我们对于平日生活中离不开的电很熟悉&#xff0c;但是电力是什么&#xff1f; 其实&#xff0c;电力就是电能作为动力的能源。电力就是我们说的电&#xff0c;不过更多了系统化。 19世纪70年代&#xff0c;电力的发明和应用掀起了第二次工业化高潮。…

关于WebSocket

WebSocket 与传统的 HTTP 协议对比 在实时通信领域&#xff0c;传统的 HTTP 协议存在以下一些问题&#xff1a; 频繁的请求和响应&#xff1a;每次通信都需要建立和关闭连接&#xff0c;带来额外的开销。高延迟&#xff1a;每次通信都需要经过多个网络层的传输&#xff0c;延…

Stm32的DMA的学习

一&#xff0c;介绍 二&#xff0c;DMA框图 三&#xff0c;DMA通道 四&#xff0c;相关HAL库函数 五&#xff0c;配置DMA 六&#xff0c;Stm32CubeMX配置 【13.1】减少CPU传输负载 DMA直接存储器访问—Kevin带你读《STM32Cube高效开发教程基础篇》_哔哩哔哩_bilibili