【华为OD题库-096】洞穴探险-java

题目

某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足迹位置。
仪器记录坐标时,坐标的数据格式为(x.y),如(1,2)、(100,200),其中0 设定探险队总部的坐标为(0,0),某位置相对总部的距离为:x*x+y*y.若两个座标的相对总部的距离相同,则第一次到达的坐标为最远的足迹。若记录仪中的坐标都不合法,输出总部坐标(0,0)。
备注:
不需要考虑双层括号嵌套的情况,比如sfsdfsd((1,2))。
输入描述
字符串,表示记录仪中的数据。
如: ferga13fdsf3(100,200)f2r3rfasf(300,400)
输出描述
字符串,表示最远足迹到达的坐标。如:(300,400)
示例1
输入输出示例仅供调试,后台判题数据一般不包含示例输入
ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)
输出
(5,10)
说明
记录仪中的合法坐标有3个:(3,10),(3.4),(5,10),其中(5,10)是相距总部最远的坐标,输出(5,10)。
示例2
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
asfefaweawfaw(0,1)fe
输出
(0,0)
说明
记录仪中的坐标都不合法,输出总部坐标(0,0)。

思路

字符串处理,利用正则提取出合法坐标,再找到最远的即可

题解

package hwod;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ExplorationCave {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        int[] res = explorationCave(str);
        System.out.println("(" + res[0] + "," + res[1] + ")");
    }

    private static int[] explorationCave(String str) {
        Pattern p = Pattern.compile("\\(\\d+,\\d+\\)");
        Matcher m = p.matcher(str);
        int[] res = new int[]{0, 0};
        while (m.find()) {
            String s = m.group();
            int[] location = Arrays.stream(s.substring(1, s.length() - 1).split(",")).mapToInt(Integer::parseInt).toArray();
            if (location[0] > 0 && location[1] > 0
                    && location[0] < 1000 && location[1] < 1000
                    && location[0] * location[0] + location[1] * location[1] > res[0] * res[0] + res[1] * res[1]) {
                res[0] = location[0];
                res[1] = location[1];

            }
        }
        return res;
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

你可能感兴趣的:(华为OD题库JAVA题解,华为od,java)