射靶子 | 豆包MarsCode AI刷题

135 阅读2分钟

一、题目解析

题目背景

在射击得分的题目中,小E的射击目标是一个靶环系统,靶心和靶环的坐标位于二维平面。射击点的得分由靶环半径决定,越靠近靶心得分越高。

解题思路

  1. 计算距离:通过射击点坐标 (x,y)(x, y),可以计算射击点到靶心的欧几里得距离:

distance=x2+y2\text{distance} = \sqrt{x^2 + y^2}

  1. 判断得分区间

    • 根据距离所属的靶环范围,决定得分:
      • 0distance1 0\leq\text{distance} \leq 1\ ,得 10 分;
      • 1distance2 1\leq\text{distance} \leq 2\ ,得 9 分;
      • 以此类推,直到 9distance10 9\leq\text{distance} \leq 10\ ,得 1 分;
      • 超出所有靶环,得 0 分。
  2. 实现逻辑

    • 使用一个循环,依次判断射击点是否在不同的靶环范围内。
    • 提前返回最优解。

代码详解

import math

def calculate_score(x, y):
    distance = math.sqrt(x**2 + y**2)
    for i in range(1, 11):
        if distance <= i:
            return 11 - i
    return 0

# 测试样例
print(calculate_score(1, 0))  # 输出:10
print(calculate_score(1, 1))  # 输出:9
print(calculate_score(0, 5))  # 输出:6
print(calculate_score(3, 4))  # 输出:6

图解分析

  1. 边界条件处理

    • 若射击点坐标为 (0, 0),显然直接得 10 分;
    • 若射击点位于环的边界上,例如 (1, 0),需要明确得分规则(通常按照规则视为包含在内)。
  2. 性能优化

    • 如果射击点很多,可以提前计算每个环的平方半径,减少开平方运算:

      def calculate_score_optimized(x, y):
          distance_squared = x**2 + y**2
          for i in range(1, 11):
              if distance_squared <= i**2:
                  return 11 - i
          return 0
      
  3. 应用场景

    • 此类逻辑可以拓展到其他范围分类问题,例如:

      • 游戏中的范围攻击判定;
      • 物流中的配送区域划分。

二、知识总结

  1. 数学知识点

    • 距离公式:x2+y2 \sqrt{x^2 + y^2} \
    • 利用循环判断多层区间的归属。
  2. Python 编程技巧

    • 利用模块 math.sqrt 精确计算平方根。
    • 使用 for 循环解决逐步递减的分值逻辑,简化代码。
  3. 优化与扩展

    • 可以将 for 循环替换为数学表达式,直接定位得分,提升效率。
    • 通过绘图工具(如 Matplotlib)直观展示靶环分布与射击点位置。

三、学习计划

  1. 制定刷题计划

    • 每天完成 3-5 道不同类型的题目,包括简单逻辑题、数学推导题和综合性题目。
    • 每周总结错误点,并复习类似题型。
  2. 错题分析与复盘

    • 利用豆包MarsCode AI的错题记录功能,将错题归类为"计算失误"、"边界条件未考虑"等问题。
    • 针对性地再刷 1-2 道同类型题,巩固理解。
    • 针对错题撰写伴学笔记.
  3. 逐步提升难度

    • 从简单题目逐步过渡到算法题,培养逻辑思维能力。
    • 定期挑战高难度题目,拓宽思维。
  4. 设定阶段性目标

    • 每俩周完成一个专题(如排序,动态规划,贪心算法),提升专项能力.
    • 阶段复盘:总结解决某一类问题的通用方法

四、工具运用

  1. 与其他资源结合

    • 数学工具:使用 WolframAlpha 验证数学公式,检查计算正确性。
    • 绘图工具:借助 Python 的 Matplotlib 直观展示射击点与靶环的关系。
  2. 充分利用豆包MarsCode AI功能

    • 自动生成测试用例,覆盖不同边界条件。
    • 利用 AI 的解题思路与提示,优化自己的解法。
    • 存刷题记录,分析做题数据,改进学习策略。
  3. 与社区互动

    • 在刷题过程中,将自己的解法分享到社区,学习他人更优解。
    • 关注热门题目和讨论,了解常见高效解法。

通过豆包MarsCode AI的刷题实践,我不仅提升了解题能力,还积累了系统的编程经验和数学知识。这一过程让我认识到,将工具与计划结合,善用错题复盘,不断调整学习方法,是实现学习高效化的关键。希望这份学习心得对大家有所启发,也期待一起交流进步!