【华为机试】2023年真题B卷(python)-洞穴探险
一、题目
题目描述:
某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足迹位置。
仪器记录坐标时,坐标的数据格式为(x,y),如(1,2)、(100,200),其中0<x<1000,0<y<1000。同时存在非法坐标,如(01,1)、(1,01),(0,100)属于非法坐标。设定探险队总部的坐标为(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(01,1)fe
输出
(0,0)
说明
记录仪中的坐标都不合法,输出总部坐标(0,0)。
四、要求
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
五、解题思路
- 首先,我们需要从输入的字符串中提取出合法的坐标数据。
- 对于每个合法的坐标,我们可以计算其相对于总部的距离,并记录最远距离和对应的坐标。
- 最后,输出记录的最远距离对应的坐标。
六、参考代码?
# -*- coding: utf-8 -*-
'''
@File : 2023-B-洞穴探险.py
@Time : 2023/12/15 14:24:22
@Author : mgc
@Version : 1.0
@Desc : None
'''
import re
def extract_coordinates(data):
pattern = r'\((\d{0,3}),(\d{0,3})\)' # 匹配坐标的正则表达式
matches = re.findall(pattern, data) # 提取所有的坐标
return [(int(x), int(y)) for x, y in matches if (not x.startswith("0") and not y.startswith("0"))] # 过滤掉如(01,1)、(1,01)这样的非法坐标并返回
def find_farthest_coordinate(data):
coordinates = extract_coordinates(data) # 提取合法的坐标
max_distance = 0
farthest_coordinate = (0, 0)
for coordinate in coordinates:
if (0<coordinate[0]<1000) and (0<coordinate[1]<1000):
distance = coordinate[0] ** 2 + coordinate[1] ** 2 # 计算相对总部的距离
else:
continue
if distance > max_distance:
max_distance = distance
farthest_coordinate = coordinate
return farthest_coordinate
# 用户输入
data = input()
result = find_farthest_coordinate(data)
print(result)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!