豆包AL刷题之小E的射击训练
问题描述
小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
分析
首先,计算射击点到靶心的距离dd ,根据两点间距离公式d=x2+y2d=x2+y2。
计算射击点到靶心的距离
distance = (x ** 2 + y ** 2) ** 0.5
举例解释:1假设射击坐标为(0,0)(0,0),
- 首先计算射击点到靶心的距离d=(0−0)2+(0−0)2=0d=(0−0)2+(0−0)2=0。
- 因为0≤10≤1,所以根据规则,得分是10分。
- 假设射击坐标为(1,1)(1,1)
- 计算距离d=(1−0)2+(1−0)2=1+1=2d=(1−0)2+(1−0)2=1+1=2
- 由于1<2≤21<2≤2,按照规则得分是11−2=911−2=9分。
- 相信大家这样就可以理解如何计算距离了。
分析射击点到靶心的距离
然后,根据题目要求分析,每个环对应不同的得分,靶心内(半径为1)得10分,依次向外的每个环分数减少1分,得到通过距离判断得分:
- 如果d⩽1d⩽1,得10分。
- 如果1<d⩽21<d⩽2,得9分。
- 如果2<d⩽32<d⩽3,得8分。
- 如果3<d⩽43<d⩽4,得7分。
- 如果4<d⩽54<d⩽5,得6分。
- 如果5<d⩽65<d⩽6,得5分。
- 如果6<d⩽76<d⩽7,得4分。
- 如果7<d⩽87<d⩽8,得3分。
- 如果8<d⩽98<d⩽9,得2分。
- 如果9<d⩽109<d⩽10,得1分。
- 如果d>10d>10,得0分。
根据距离确定得分
- 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
总结:
本题的主要思路是计算距离,通过使用欧几里得距离公式计算 (x, y) 到 (0, 0) 的距离。
然后根据距离的大小,返回相应的得分。本题类型属于简单题,运用基本的if else 语法可以完成,注意在这里else if简写成elif,本题适合初学者进行练习,解题关键在于距离,只要把逻辑顺序理解清楚,就可以完成。