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

136 阅读3分钟

Hello,欢迎观看,我是Brian。

***问题描述

小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

情况分析

情况一:射击坐标在环上。

情况二:射击坐标在环与环之间。

情况三:射击坐标在10环外。

思路解析

通过勾股定理算出半径,再和上述几个情况做判断即可

图解

屏幕截图 2024-11-04 222613.png

代码实现

下面是完整的Python代码实现:


import math

def solution(x, y):
    # write code here
    squ = x**2 + y**2
    squroot = math.sqrt(squ)
    num = math.floor(squroot)
    
    if num > 10:
        return 0
    elif squroot % 1 == 0:
        return 11 - num
    else:
        return 10 - num

def main():
    print(solution(1, 0) == 10)
    print(solution(1, 1) == 9)
    print(solution(0, 5) == 6)
    print(solution(3, 4) == 6)

main()

代码详解:

  1. 导入数学模块

    import math
    

    这一行代码导入了 Python 的 math 模块,它提供了一些数学函数,比如计算平方根的 sqrt 函数和向下取整的 floor 函数。

  2. 定义 solution 函数

    def solution(x, y):
    

    这个函数接受两个参数 xy,它们代表射击点的坐标。

  3. 计算射击点到靶心的距离

    squ = x**2 + y**2
    squroot = math.sqrt(squ)
    

    这里首先计算射击点到靶心的平方距离(squ),然后使用 math.sqrt 函数计算实际距离(squroot)。

  4. 确定环编号

    num = math.floor(squroot)
    

    使用 math.floor 函数获取距离的整数部分,这个整数部分代表了环的编号。

  5. 检查距离是否超出所有环

    if num > 10:
        return 0
    

    如果环编号大于10,说明射击点超出了所有环,返回得分0。

  6. 检查是否在环内

    elif squroot % 1 == 0:
        return 11 - num
    else:
        return 10 - num
    
    • 如果 squroot 是一个整数(即 squroot % 1 == 0),说明射击点正好在某个环的边界上,返回 11 - num 分。
    • 如果 squroot 不是整数,说明射击点在两个环之间,返回 10 - num 分。
  7. 定义 main 函数

    def main():
        print(solution(1, 0) == 10)
        print(solution(1, 1) == 9)
        print(solution(0, 5) == 6)
        print(solution(3, 4) == 6)
    

    main 函数用于测试 solution 函数,通过打印输出测试结果来验证函数的正确性。

  8. 调用 main 函数

    main()
    

    最后,调用 main 函数来执行测试。

总结

很高兴使用豆包MarsCode AI刷题,虽然这道题十分简单,但是我还是很认真的对待它。我也很高兴发布我的第一篇掘金。