当前位置:   article > 正文

华为OD机试真题- 最远足迹-2023年OD统一考试(B卷)_华为od 试题库

华为od 试题库

题目描述:

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

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)。

备注:不需要考虑双层括号嵌套的情况,比如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)

解题思路:

使用正则表达式,对字符串处理

  1. var readline = require('readline');
  2. const rl = readline.createInterface({
  3. input: process.stdin,
  4. output: process.stdout
  5. });
  6. rl.on('line', function(line: string){
  7. const posList: number[][] = [];
  8. let i = 0;
  9. while(line.indexOf("(", i) !== -1) {
  10. i = line.indexOf("(", i) + 1;
  11. const disStr = line.slice(i, line.indexOf(")", i));
  12. const [aStr, bStr] = disStr.split(",");
  13. if(aStr.startsWith("0") || bStr.startsWith("0")) {
  14. continue;
  15. }
  16. const a = Number(aStr), b = Number(bStr);
  17. if(a > 0 && a < 1000 && b > 0 && b < 1000) {
  18. posList.push([a, b]);
  19. }
  20. }
  21. let maxDis = -Infinity, maxPos = [0, 0];
  22. posList.forEach(([a, b]) => {
  23. const dis = a * a + b * b;
  24. if(dis > maxDis) {
  25. maxDis = dis;
  26. maxPos = [a, b];
  27. }
  28. })
  29. console.log(`(${maxPos[0]},${maxPos[1]})`)
  30. });
  1. import sys
  2. s = input()
  3. stack = []
  4. res = []
  5. i = 0
  6. while i < len(s):
  7. if s[i] == '(' and len(stack) == 0:
  8. stack.append(s[i])
  9. j = i+1
  10. while s[j] != ')' and j < len(s):
  11. j += 1
  12. res.append(s[i:j+1])
  13. stack.pop()
  14. i = j
  15. else:
  16. i+=1
  17. ans = (0, 0)
  18. max_sum = 0
  19. for i in res:
  20. sum1 = 0
  21. tmp = i.strip('()')
  22. l = tmp.split(',')
  23. if len(l) != 2:
  24. print(ans)
  25. sys.exit()
  26. for j in l:
  27. if not j.isdigit():
  28. print(ans)
  29. sys.exit()
  30. elif j[0] == '0':
  31. print(ans)
  32. sys.exit()
  33. elif int(j) <= 0 or int(j) >= 1000:
  34. print(ans)
  35. sys.exit()
  36. else:
  37. sum1 += int(j)*int(j)
  38. max_sum = max(max_sum, sum1)
  39. ans = i
  40. print(ans)

  1. import java.util.*;
  2. import java.util.regex.Pattern;
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. String str = sc.nextLine();
  7. String[] arr1 = str.split("\\(");
  8. String[] arr2 = new String[arr1.length];
  9. int max = 0, maxX = 0, maxY = 0;
  10. int j = 0;
  11. for(int i = 0; i < arr1.length; i++){
  12. if(arr1[i].contains(")")){
  13. arr2[j] = arr1[i].split("\\)")[0];
  14. j++;
  15. }
  16. }
  17. Pattern pattern = Pattern.compile("[1-9]+[0-9]*,[1-9]+[0-9]*");
  18. for(int i = 0; i < j; i++){
  19. if(pattern.matcher(arr2[i]).matches()){
  20. int a = Integer.valueOf(arr2[i].split(",")[0]);
  21. int b = Integer.valueOf(arr2[i].split(",")[1]);
  22. if(a<1000&&b<1000&&a*a+b*b>max){
  23. max = a*a+b*b;
  24. maxX = a;
  25. maxY = b;
  26. }
  27. }
  28. }
  29. System.out.println("("+maxX+","+maxY+")");
  30. }
  31. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/488367
推荐阅读
相关标签
  

闽ICP备14008679号