华为OD机试 - 最远足迹(2022Q4 100分)

news2025/2/24 8:30:19

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

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

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

备注:

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

二、输入描述

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

三、输出描述

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

如: (10,20)

  • 输入:asdf(7,8)qwertjh45(5,7)fa65jhsdf23fg(6,8)
  • 输出:(7,8)

四、解题思路

  1. 读取输入的字符串;
  2. 定义变量 r 和 l,分别表示括号的右边界和左边界;
  3. 定义一个列表 list 存储合法的坐标;
  4. 定义一个二维列表 lists 存储所有合法的坐标;
  5. 遍历字符串,当遇到左括号时,记录左边界 l 的位置;当遇到右括号时,记录右边界 r 的位置;
  6. 如果左右边界都不为零,则表示找到了一个合法的坐标,将其提取出来并判断是否合法;
  7. 如果坐标合法,则将其加入到 list 中,并将 list 加入到 lists 中;
  8. 重置左右边界 l 和 r;
  9. 判断 lists 的长度,如果为零,则输出总部坐标 (0,0);否则,根据坐标的相对距离排序 lists,取第一个坐标作为最远足迹的位置;
  10. 输出最终结果。

五、Java算法源码

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    String s = sc.nextLine();
    
    // 定义变量 r 和 l,分别表示括号的右边界和左边界
    int r = 0;
    int l = 0;

	// 定义一个列表 list 存储合法的坐标
    List<Integer> list = new ArrayList<>();
    // 定义一个二维列表 lists 存储所有合法的坐标
    List<List<Integer>> lists = new ArrayList<>();

	// 遍历字符串,当遇到左括号时,记录左边界 l 的位置;
    for (int i = 0; i < s.length(); i++) {
    	// 当遇到右括号时,记录右边界 r 的位置
        if (s.charAt(i) == '(') {
            l = i + 1;
            // 当遇到右括号时,记录右边界 r 的位置
        } else if (s.charAt(i) == ')') {
            r = i;
        }
        
        // 如果左右边界都不为零,则表示找到了一个合法的坐标,将其提取出来并判断是否合法
        if (r != 0) {
            String[] ss = s.substring(l, r).split(",");
            int j = Integer.parseInt(ss[0]);
            int w = Integer.parseInt(ss[1]);
            
            // 如果坐标合法,则将其加入到 list 中,并将 list 加入到 lists 中
            if (j > 0 && j < 1000 && w > 0 && w < 1000 && ss[0].charAt(0) != '0' && ss[1].charAt(0) != '0') {
                list.add(j);
                list.add(w);
                lists.add(list);
                list = new ArrayList<>();
            }
            // 重置左右边界 l 和 r
            l = r = 0;
        }
    }

	//  判断 lists 的长度,如果为零,则输出总部坐标 (0,0)
    if (lists.size() == 0) {
        System.out.println("(0,0)");
    } else {
    	// 根据坐标的相对距离排序 lists,取第一个坐标作为最远足迹的位置
        lists.sort((a, b) -> {
            int ax = a.get(0) * a.get(0) + a.get(1) * a.get(1);
            int bx = b.get(0) * b.get(0) + b.get(1) * b.get(1);
            if (bx >= ax) {
                return 1;
            }
            return -1;
        });

        System.out.println("(" + lists.get(0).get(0) + "," + lists.get(0).get(1) + ")");
    }
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

设计模式14、命令模式 Command

解释说明&#xff1a;命令模式&#xff08;Command Pattern&#xff09;是一种数据驱动的设计模式&#xff0c;它属于行为型模式。请求以命令的形式包裹在对象中&#xff0c;并传递给调用对象。调用对象寻找可以处理该命令的合适对象&#xff0c;并把该命令传给相应的对象&…

Datagrip:高效数据库管理和开发

文章目录 摘要引言Datagrip的特点与优势多数据库支持强大的查询和编辑功能数据库导航和管理版本控制集成数据库安全性 Datagrip的使用方法安装和配置Datagrip查询和编辑数据数据库导航和管理版本控制和团队协作 总结参考文献 摘要 本文介绍了Datagrip作为一款强大的数据库管理…

什么是跨域资源共享(CORS)?如何在前端中处理CORS问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

2000至2022年中国月度植被覆盖度产品

简介&#xff1a; 中国区域2000至2022年月度植被覆盖度产品的空间分辨率250米&#xff0c;合成方式采用月最大值合成。本产品采用基于归一化植被指数&#xff08;NDVI&#xff09;像元二分模型&#xff0c;根据土地利用类型确定纯植被像元值和纯裸土像元值&#xff0c;计算中去…

cvpr24写作模板pdfLaTex编译器注意点小结

文章目录 1 更改作者显示 Anonymous CVPR submission2 \label标签的作用3 换行符// 与换列符&4 \medskip5 首行缩进6 插入图片6.1 单幅图片6.2 并排显示 Reference https://cvpr.thecvf.com/Conferences/2024 1 更改作者显示 Anonymous CVPR submission 这一行开头加上% …

代码检查过程中为什么需要涉及到编译呢?

作者&#xff1a; gentle_zhou 原文链接&#xff1a;代码检查过程中为什么需要涉及到编译呢&#xff1f;-云社区-华为云 随着大家对软件安全越来越重视&#xff0c;在编码阶段针对源码安全的保障也被各行各业企业研发测试运维团队与个人开发者越来越频繁的被提及&#xff0c;其…

【开发篇】二十、SpringBoot整合RocketMQ

文章目录 1、整合2、消息的生产3、消费4、发送异步消息5、补充&#xff1a;安装RocketMQ 1、整合 首先导入起步依赖&#xff0c;RocketMQ的starter不是Spring维护的&#xff0c;这一点从starter的命名可以看出来&#xff08;不是spring-boot-starter-xxx&#xff0c;而是xxx-s…

分类预测 | MATLAB实现KOA-CNN开普勒算法优化卷积神经网络数据分类预测

分类预测 | MATLAB实现KOA-CNN开普勒算法优化卷积神经网络数据分类预测 目录 分类预测 | MATLAB实现KOA-CNN开普勒算法优化卷积神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现KOA-CNN开普勒算法优化卷积神经网络数据分类预测&#xff0…

安果计算器-您的全能计算伴侣

在日常生活、工作中&#xff0c;我们常常面临各种计算需求。安果计算器为您提供全面而精确的计算解决方案。 一、综 合数学功能:基础运算: 包括加、减、乘、除等基础算术功能。高级数学: 平方根、立方根、开方、随机复数、随机整数、绝对值、常用对数、自然对数、正弦、余弦、…

跨时区系统设计方案

一、背景 门店收银系统分布在澳洲、中国、新西兰&#xff0c;分跨不同时区&#xff0c;系统需要显示不同时区的时间&#xff0c;这是比较折腾的一件事&#xff0c;今天讲一下我们是怎么作的。 二、时区概念 时区 划分时区作用是为了统一时间&#xff0c;让各个区域12点都是…

基于BERT模型进行文本处理(Python)

基于BERT模型进行文本处理(Python) 所有程序都由Python使用Spyder运行。 对于BERT&#xff0c;在运行之前&#xff0c;它需要安装一些环境。 首先&#xff0c;打开Spyder。其次&#xff0c;在控制台中单独放置要安装的&#xff1a; pip install transformers pip install tor…

三维模型3DTile格式轻量化的纹理压缩和质量关系分析

三维模型3DTile格式轻量化的纹理压缩和质量关系分析 在三维模型的3DTile格式轻量化处理中&#xff0c;纹理压缩是一个重要环节。但是&#xff0c;纹理压缩和模型质量之间存在明显的关系需要权衡。以下是纹理压缩和模型质量关系的详细分析&#xff1a; 1、压缩率与纹理质量&…

Sklearn入门

Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一. Sklearn 包含了很多种机器学习的方式: Classification 分类Regression 回归Clustering 非监督分类Dimensionality reduction 数据降维Model Selection 模型选择Preprocessing 数据预处理 我们总能…

Java-包装类

这里写目录标题 包装类&#xff08;Wrapper&#xff09;包装类和基本数据的转换 String VS StringBuffer VS StringBuilderStringStringBufferStringBuilder 包装类&#xff08;Wrapper&#xff09; 针对八种基本数据类型相应的引用类型 基本数据类型包装类booleanBooleancha…

C++设计模式(1)-- 单例模式

基本概念 在一个项目中&#xff0c;全局范围内&#xff0c;某个类的实例有且仅有一个&#xff0c;通过这个唯一实例向其他模块提供数据的全局访问&#xff0c;这种模式就叫单例模式&#xff0c;单例模式的典型应用就是任务队列 涉及一个类多对象操作的函数有以下几个&#xff…

嵌入式基础知识-IP地址与子网划分

本篇介绍IP地址与子网划分的一些基础知识&#xff0c;在嵌入式开发&#xff0c;使用网络功能时&#xff0c;需要了解网络的一些基础知识。 1 IP地址 1.1 IPv4与IPv6 对比信息IPv4IPv6长度32位128位地址表示形式点分十进制冒分十六进制表示示例192.168.5.1002002:0000:0000:0…

this关键字在不同上下文中的值是如何确定的?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

最全解决docker配置kibana报错 Kibana server is not ready yet

问题复现&#xff1a; 在浏览器输入http://192.168.101.65:5601/ 访问kibana报错 Kibana server is not ready yet 问题报错&#xff1a; 首先查看kibana的日志 docker logs kibana 看到报错如下&#xff1a; {"type":"log","timestamp":&q…

【小笔记】复杂模型小数据可能会造成过拟合还是欠拟合?

【学而不思则罔&#xff0c;思而不学则殆】 10.8 问题 针对这个问题&#xff0c;我先问了一下文心一言 它回答了为什么会过拟合和欠拟合&#xff0c;但并没有回答我给的场景。 简单分析 分析模型 复杂模型就表示模型的拟合能力很强&#xff0c;对于数据中特征&#xff08…

如何保证 RabbitMQ 的消息可靠性?

项目开发中经常会使用消息队列来完成异步处理、应用解耦、流量控制等功能。虽然消息队列的出现解决了一些场景下的问题&#xff0c;但是同时也引出了一些问题&#xff0c;其中使用消息队列时如何保证消息的可靠性就是一个常见的问题。如果在项目中遇到需要保证消息一定被消费的…