78-洞穴探险、最远距离

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

  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)

示例一

输入

ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)

输出

(5,10)

说明

记录仪中的合法坐标有三个(3,10)(3,4)(5,10)其中(5,10)是相距总部最远的坐标输出(5,10)

示例二

输入

asfefaweawfawf(0,1)fe

输出

(0,0)

说明

记录仪中的坐标都不合法输出总部坐标(0,0)

思路:

先从字符串中取出坐标,然后计算坐标的平方和,最后找到平方和最大时所对应的坐标。

至于怎么取出坐标?

        把字符串分别按"("    ")"    ","  进行分割,然后就能得到由坐标的x、y值构成的列表,对列表成员进行平方求和。

        然后进行判断,如果所有平方和=0,说明所有坐标都是无效坐标,此时输出(0,0)。如果不等于0,说明有有效坐标,此时,把坐标值跟各自的平方和进行打包,打包后根据平方和的大小进行降序排序,此时,排序后的列表中第一个成员就是最远距离,格式化输出这个坐标即可。

代码:

# as(1,2)dc(4,3)ac(3,4)
a = input().split('(')
print(a)  # ['as', '1,2)dc', '4,3)ac', '3,4)']

b = []
for i in a:
    b.append(i.split(")"))
print(b)  # [['as'], ['1,2', 'dc'], ['4,3', 'ac'], ['3,4', '']]
c = []
for i in b:
    for j in i:
        if ',' in j:
            c.append(i[0])
print(c)  # ['1,2', '4,3', '3,4']

d = []
for i in c:
    d.append(i.split(","))
print(d)  # [['1', '2'], ['4', '3'], ['3', '4']]

e = []
for i in d:
    if '0' in i:
        e.append(0)
    else:
        f = int(i[0]) ** 2 + int(i[1]) ** 2
        print(f)
        e.append(f)
print(e)  # [5, 25, 25]

if sum(e) != 0:
    result = list(zip(d, e))
    print(result)  # [(['1', '2'], 5), (['4', '3'], 25), (['3', '4'], 25)]

    g = sorted(result, key=lambda x: x[1], reverse=True) # 按平方和的降序排列,得到排序后的列表第一个成员距离最远
    print(g)
    print(g[0][0])
    print('(' + g[0][0][0] + ',' + g[0][0][1] + ')')

else:
    print('(0,0)')

结果:

# 输入:
as(1,2)dc(4,3)ac(3,4)
# ['as', '1,2)dc', '4,3)ac', '3,4)']
# [['as'], ['1,2', 'dc'], ['4,3', 'ac'], ['3,4', '']]
# ['1,2', '4,3', '3,4']
# [['1', '2'], ['4', '3'], ['3', '4']]
# 5
# 25
# 25
# [5, 25, 25]
# [(['1', '2'], 5), (['4', '3'], 25), (['3', '4'], 25)]
# [(['4', '3'], 25), (['3', '4'], 25), (['1', '2'], 5)]
# ['4', '3']

# 结果:
(4,3)



# 输入:
ferga13fdsf3(100,200)f2r3rfasf(300,400)
# ['ferga13fdsf3', '100,200)f2r3rfasf', '300,400)']
# [['ferga13fdsf3'], ['100,200', 'f2r3rfasf'], ['300,400', '']]
# ['100,200', '300,400']
# [['100', '200'], ['300', '400']]
# 50000
# 250000
# [50000, 250000]
# [(['100', '200'], 50000), (['300', '400'], 250000)]
# [(['300', '400'], 250000), (['100', '200'], 50000)]
# ['300', '400']
# 结果:
(300,400)

# 输入:
asfefaweawfawf(0,1)fe
# ['asfefaweawfawf', '0,1)fe']
# [['asfefaweawfawf'], ['0,1', 'fe']]
# ['0,1']
# [['0', '1']]
# [0]
# 结果:
(0,0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值