刷题笔记|青训营X豆包MarsCode 技术训练营

27 阅读3分钟

问题描述

小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

以下是对这道题目的分析: ### 一、题目理解

  1. 靶的结构与得分规则:题目描述了一个具有10个环的靶,靶心位于坐标(0,0)(0, 0),各环得分从靶心向外依次递减,靶心内(半径为1)得10分,往外每一环分数减1分,若射击点在半径为ii的圆内,则得11i11 - i分,超出所有环得0分。
  2. 任务明确:根据给定的射击坐标(x,y)(x, y),计算出小E的射击得分

二、解题思路分析

  1. 计算射击点到靶心的距离: - 首先需要根据坐标(x,y)(x, y)计算射击点到靶心(0,0)(0, 0)的距离。根据两点间距离公式d=x2+y2d = \sqrt{x^2 + y^2},可以得到射击点到靶心的距离dd
  2. 确定得分: - 然后根据计算出的距离dd来确定得分。从靶心向外,各环半径依次递增,所以通过比较距离dd与各环半径的大小关系来判断射击点位于哪个环内或是否超出所有环。 - 可以从半径为1开始依次判断,如果d1d \leq 1,则射击点在靶心内,得10分;如果1<d21 < d \leq 2,则得9分;以此类推,直到判断出射击点所在的环对应的得分,若dd大于所有环的最大半径(即10),则得0分。

三、代码实现思路(以Python为例) python 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

四、测试样例分析

  1. 样例1: - 输入:x = 1, y = 0。 - 首先计算射击点到靶心的距离:d=12+02=1d = \sqrt{1^2 + 0^2} = 1。 - 因为d=1d = 1,满足d1d \leq 1的条件,所以根据得分规则,射击点在靶心内,得10分,与输出结果一致。
  2. 样例2: - 输入:x = 1, y = 1。 - 计算距离:d=12+12=21.414d = \sqrt{1^2 + 1^2} = \sqrt{2} \approx 1.414。 - 因为1<d21 < d \leq 2,所以得9分,与输出结果一致。
  3. 样例3: - 输入:x = 0, y = 5。 - 计算距离:d=02+52=5d = \sqrt{0^2 + 5^2} = 5。 - 因为4<d54 < d \leq 5,所以得6分,与输出结果一致。
  4. 样例4: - 输入:x = 3, y = 4。 - 计算距离:d=32+42=5d = \sqrt{3^2 + 4^2} = 5。 - 因为 ### 五、总结感悟
  5. 数学知识的应用:本题主要运用了两点间距离公式来计算射击点到靶心的距离,然后根据距离与各环半径的关系确定得分。这体现了数学知识在解决实际问题中的重要性,很多实际场景都需要借助数学公式和定理来进行量化和分析。
  6. 循环判断的逻辑:通过循环依次判断射击点到靶心的距离与各环半径的关系,从而确定得分。这种循环判断的逻辑在处理类似根据条件进行分类判断的问题时非常有用,需要准确把握判断条件和循环的终止条件,以确保得到正确的结果。
  7. 代码实现的简洁性:以Python为例的代码实现相对简洁,通过几行代码就可以完成整个计算过程。这提醒我们在编程时,要善于利用已有的数学函数(如本题中的平方根函数)和编程结构(如循环),在保证功能实现的前提下,尽量追求代码的简洁性和可读性。