问题描述
小E正在训练场进行射击练习,靶有10个环,靶心位于坐标(0, 0)。每个环对应不同的得分,靶心内(半径为1)得10分,依次向外的每个环分数减少1分。若射击点在某个半径为i的圆内,则得11-i分。如果射击点超出所有的环,则得0分。
根据给定的射击坐标(x, y),请计算小E的射击得分。
结果展示
def solution(x: int, y: int) -> int:
distance_squared = x**2 + y**2
for i in range(1, 11):
if distance_squared <= i**2:
return 11 - i
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)
题目解析
解题思路
-
计算射击点与靶心的距离平方(避免使用平方根来节省计算资源)。 distance_squared=x2+y2\text{distance_squared} = x^2 + y^2distance_squared=x2+y2
-
遍历从靶心(半径1)到最外层环(半径10):
- 如果 distance_squared≤i2\text{distance_squared} \leq i^2distance_squared≤i2,则得分为 11−i11-i11−i。
-
如果超出所有环,返回得分为 0。
学习计划
-
掌握基本几何算法:
- 学习常用几何公式,如欧几里得距离、圆与直线交点等。
-
优化技巧:
- 理解如何通过简化运算提升效率(如避免开方运算)。
-
解题模式
将复杂问题拆解为子问题:例如,先判断点距离,再逐层判断环。 条件判断的逻辑构造:掌握逐层递进的判断方式,适用于分段函数、分区问题等。
- 调试与验证
单元测试:为代码设计多样化的输入案例,确保逻辑无误。
错误定位:通过逐步输出中间值或借助调试工具快速发现问题。
- 代码与工具结合
Matplotlib 可视化:通过图形验证算法逻辑,直观理解问题。
AI 协作:利用AI解析题目、优化代码,并提供进一步学习建议。
工具运用
-
Python: 主要工具,用于编写和运行代码。
-
可视化工具: 使用 Matplotlib 绘制靶场,验证点是否落在正确区域。
-
调试工具: 用 Python 的
print或调试器验证距离计算和判断逻辑。 -
算法优化: 优化数值运算时,尽量避免多余的计算(如平方根)。
AI辅助下的学习收获
1. 学会提问与表达
通过与AI的交互,逐渐学会清晰表达自己的疑惑和需求。具体体现在:
- 描述问题时如何抓住核心。
- 如何根据AI反馈改进自己的代码和思路。
2. 编程知识的拓展
AI不仅能解决问题,还会解释背后的原理和技巧:
- 为什么用距离平方比直接计算距离更高效?
- 如何设计代码以便扩展到更多情况(如多靶心场景)?
3. 学习的即时反馈
- AI能快速指出问题所在,给予针对性建议,避免“卡壳”浪费时间。
- 在代码实现后,AI会指出优化空间,让初学者逐步掌握高效编程技巧。