问题描述
小E正在训练场进行射击练习,靶有10个环,靶心位于坐标(0, 0)。每个环对应不同的得分,靶心内(半径为1)得10分,依次向外的每个环分数减少1分。若射击点在某个半径为i的圆内,则得11-i分。如果射击点超出所有的环,则得0分。
根据给定的射击坐标(x, y),请计算小E的射击得分。
测试样例
样例1:
输入:
x = 1, y = 0
输出:10
样例2:
输入:
x = 1, y = 1
输出:9
样例3:
输入:
x = 0, y = 5
输出:6
样例4:
输入:
x = 3, y = 4
输出:6
题解
为了计算小E的射击得分,我们需要根据射击点的坐标 (x, y) 确定它所在的环,并根据环的位置计算得分。具体步骤如下:
-
计算距离:
- 计算射击点到靶心的距离
distance,公式为distance = sqrt(x^2 + y^2)。
- 计算射击点到靶心的距离
-
确定得分:
- 根据
distance的值,确定射击点所在的环。 - 靶心内(半径为1)得10分。
- 依次向外的每个环分数减少1分,即如果射击点在半径为
i的圆内,则得11 - i分。 - 如果射击点超出所有的环(半径大于10),则得0分。
- 根据
实现代码
下面是实现这个逻辑的 Python 代码:
import math
def solution(x: int, y: int) -> int:
# 计算射击点到靶心的距离
distance = math.sqrt(x**2 + y**2)
# 确定得分
if distance <= 1:
return 10
elif distance <= 2:
return 9
elif distance <= 3:
return 8
elif distance <= 4:
return 7
elif distance <= 5:
return 6
elif distance <= 6:
return 5
elif distance <= 7:
return 4
elif distance <= 8:
return 3
elif distance <= 9:
return 2
elif distance <= 10:
return 1
else:
return 0
if __name__ == '__main__':
# 测试样例
print(solution(1, 0) == 10) # 输出: True
print(solution(1, 1) == 9) # 输出: True
print(solution(0, 5) == 6) # 输出: True
print(solution(3, 4) == 6) # 输出: True
代码解释
-
计算距离:
- 使用
math.sqrt(x**2 + y**2)计算射击点到靶心的距离distance。
- 使用
-
确定得分:
- 使用一系列
if-elif-else语句,根据distance的值确定射击点所在的环,并返回相应的得分。 - 如果
distance小于等于1,得10分。 - 如果
distance小于等于2,得9分。 - 依次类推,直到
distance小于等于10,得1分。 - 如果
distance大于10,得0分。
- 使用一系列