Hello,欢迎观看,我是Brian。
***问题描述
小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
情况分析
情况一:射击坐标在环上。
情况二:射击坐标在环与环之间。
情况三:射击坐标在10环外。
思路解析
通过勾股定理算出半径,再和上述几个情况做判断即可
图解
代码实现
下面是完整的Python代码实现:
import math
def solution(x, y):
# write code here
squ = x**2 + y**2
squroot = math.sqrt(squ)
num = math.floor(squroot)
if num > 10:
return 0
elif squroot % 1 == 0:
return 11 - num
else:
return 10 - num
def main():
print(solution(1, 0) == 10)
print(solution(1, 1) == 9)
print(solution(0, 5) == 6)
print(solution(3, 4) == 6)
main()
代码详解:
-
导入数学模块:
import math这一行代码导入了 Python 的
math模块,它提供了一些数学函数,比如计算平方根的sqrt函数和向下取整的floor函数。 -
定义
solution函数:def solution(x, y):这个函数接受两个参数
x和y,它们代表射击点的坐标。 -
计算射击点到靶心的距离:
squ = x**2 + y**2 squroot = math.sqrt(squ)这里首先计算射击点到靶心的平方距离(
squ),然后使用math.sqrt函数计算实际距离(squroot)。 -
确定环编号:
num = math.floor(squroot)使用
math.floor函数获取距离的整数部分,这个整数部分代表了环的编号。 -
检查距离是否超出所有环:
if num > 10: return 0如果环编号大于10,说明射击点超出了所有环,返回得分0。
-
检查是否在环内:
elif squroot % 1 == 0: return 11 - num else: return 10 - num- 如果
squroot是一个整数(即squroot % 1 == 0),说明射击点正好在某个环的边界上,返回11 - num分。 - 如果
squroot不是整数,说明射击点在两个环之间,返回10 - num分。
- 如果
-
定义
main函数:def main(): print(solution(1, 0) == 10) print(solution(1, 1) == 9) print(solution(0, 5) == 6) print(solution(3, 4) == 6)main函数用于测试solution函数,通过打印输出测试结果来验证函数的正确性。 -
调用
main函数:main()最后,调用
main函数来执行测试。
总结
很高兴使用豆包MarsCode AI刷题,虽然这道题十分简单,但是我还是很认真的对待它。我也很高兴发布我的第一篇掘金。