01问题
问题描述
小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
02思路
计算射击坐标(x, y)距圆心的距离,若射击点在某个半径为i的圆内,用11-i计算得分,如果果射击点超出所有的环,则得0分。
03代码
方法一
计算射击坐标(x, y)距圆心的距离,若射击点在某个半径为i的圆内,用11-i计算得分,如果果射击点超出所有的环,则得0分。
import math
def solution(x: int, y: int) -> int:
# write code here
# 计算射击坐标(x, y)距靶心的距离
d = math.sqrt(x * x + y * y)
# print(d)
# 向上取整
d = math.ceil(d)
# print(d)
if d > 10:
return 0
return 11 - d
if __name__ == '__main__':
print(solution(1, 0) == 10)
print(solution(1, 1) == 9)
print(solution(0, 5) == 6)
print(solution(3, 4) == 6)
方法二
通过从1到10循环每个圆的半径,来判断该点属于哪个圆,便可以算出得分
def solution(x: int, y: int) -> int:
# write code here
for r in range(1, 11):
# 在圆内或在圆上
if x * x + y * y <= r * r:
return 11 - r
# 如果不在这些圆内,得分为0
return 0
if __name__ == '__main__':
print(solution(1, 0) == 10)
print(solution(1, 1) == 9)
print(solution(0, 5) == 6)
print(solution(3, 4) == 6)