AI刷题 44小E的射击训练 题解| 豆包MarsCode AI刷题

43 阅读2分钟

问题描述

小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

题解

为了计算小E的射击得分,我们需要根据射击点的坐标 (x, y) 确定它所在的环,并根据环的位置计算得分。具体步骤如下:

  1. 计算距离

    • 计算射击点到靶心的距离 distance,公式为 distance = sqrt(x^2 + y^2)
  2. 确定得分

    • 根据 distance 的值,确定射击点所在的环。
    • 靶心内(半径为1)得10分。
    • 依次向外的每个环分数减少1分,即如果射击点在半径为 i 的圆内,则得 11 - i 分。
    • 如果射击点超出所有的环(半径大于10),则得0分。

实现代码

下面是实现这个逻辑的 Python 代码:

import math

def solution(x: int, y: int) -> int:
    # 计算射击点到靶心的距离
    distance = math.sqrt(x**2 + y**2)
    
    # 确定得分
    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

if __name__ == '__main__':
    # 测试样例
    print(solution(1, 0) == 10)  # 输出: True
    print(solution(1, 1) == 9)   # 输出: True
    print(solution(0, 5) == 6)   # 输出: True
    print(solution(3, 4) == 6)   # 输出: True

代码解释

  1. 计算距离

    • 使用 math.sqrt(x**2 + y**2) 计算射击点到靶心的距离 distance
  2. 确定得分

    • 使用一系列 if-elif-else 语句,根据 distance 的值确定射击点所在的环,并返回相应的得分。
    • 如果 distance 小于等于1,得10分。
    • 如果 distance 小于等于2,得9分。
    • 依次类推,直到 distance 小于等于10,得1分。
    • 如果 distance 大于10,得0分。