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

23 阅读1分钟
def solution(x: int, y: int) -> int:
    # 计算射击点到靶心的距离
    distance = (x * x + y * y) ** 0.5
    
    # 如果距离大于10,超出所有环,得0分
    if distance > 10:
        return 0
    
    # 根据距离确定所在环数
    # 使用向上取整,因为距离正好在圆上时应该算作外环
    ring = int(distance + 0.99999)  # 使用这种方式处理浮点数精度问题
    
    # 计算得分:11减去环数
    score = 11 - ring
    
    return score

if __name__ == '__main__':
    # 测试样例
    print(solution(1, 0) == 10)  # True,距离1,在第1环内
    print(solution(1, 1) == 9)   # True,距离√2≈1.414,在第2环内
    print(solution(0, 5) == 6)   # True,距离5,在第5环内
    print(solution(3, 4) == 6)   # True,距离5,在第5环内

    # 额外测试用例
    print(solution(0, 0) == 10)  # 靶心
    print(solution(10, 0) == 1)  # 第10环边界
    print(solution(7, 7) == 1)   # 距离约9.899,在第10环内
    print(solution(8, 8) == 0)   # 距离约11.314,超出所有环