青训营X豆包MarsCode 技术训练营第二课 | 豆包MarsCode AI 刷题

133 阅读3分钟

豆包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,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,本题适合初学者进行练习,解题关键在于距离,只要把逻辑顺序理解清楚,就可以完成。