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

80 阅读3分钟

题目

小E正在训练场进行射击练习,靶有10个环,靶心位于坐标(0, 0)。每个环对应不同的得分,靶心内(半径为1)得10分,依次向外的每个环分数减少1分。若射击点在某个半径为i的圆内,则得11-i分。如果射击点超出所有的环,则得0分。 根据给定的射击坐标(x, y),请计算小E的射击得分。

代码思路

  1. 计算距离:首先计算射击点 (x, y) 到靶心 (0, 0) 的距离。使用欧几里得距离公式 distance = Math.sqrt(x * x + y * y)
  2. 判断得分:使用一个循环从内到外遍历每个环(从1到10),判断射击点是否在该环内。如果射击点在某个环内,则返回对应的得分 11 - i
  3. 返回结果:如果射击点超出所有环,则返回0分。

关键点

  • 距离计算:使用 Math.sqrt(x * x + y * y) 计算点到原点的距离。
  • 循环判断:通过循环判断距离是否在某个环内,并返回对应的得分。
  • 边界处理:如果距离大于10,则返回0分。

代码

public class Main {
    public static int solution(int x, int y) {
        // 计算射击点到靶心的距离
        double distance = Math.sqrt(x * x + y * y);
        // 使用循环来计算得分
        for (int i = 1; i <= 10; i++) {
            if (distance <= i) {
                return 11 - i; // 返回对应的得分
            }
        }

        return 0; // 超出所有环
    }

    public static void main(String[] args) {
        System.out.println(solution(1, 0) == 10);  // 输出: true
        System.out.println(solution(1, 1) == 9);   // 输出: true
         System.out.println(solution(0, 5) == 6);   // 输出: true
         System.out.println(solution(3, 4) == 6);   // 输出: true
    }
    }

### 代码功能解释

1.  **计算射击点到靶心的距离**:

    -   使用欧几里得距离公式 `distance = Math.sqrt(x * x + y * y)` 计算射击点 `(x, y)` 到靶心 `(0, 0)` 的距离。

1.  **判断得分**:

    -   使用一个循环从内到外遍历每个环(从110),判断射击点是否在该环内。
    -   如果射击点在某个环内,则返回对应的得分 `11 - i`。

1.  **返回结果**:

    -   如果射击点超出所有环,则返回0分。

代码功能解释

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

    • 使用欧几里得距离公式 distance = Math.sqrt(x * x + y * y) 计算射击点 (x, y) 到靶心 (0, 0) 的距离。
  2. 判断得分

    • 使用一个循环从内到外遍历每个环(从1到10),判断射击点是否在该环内。
    • 如果射击点在某个环内,则返回对应的得分 11 - i
  3. 返回结果

    • 如果射击点超出所有环,则返回0分。

代码功能总结

  • 输入:射击点的坐标 (x, y)

  • 输出:射击得分,根据射击点与靶心的距离计算得出。

  • 逻辑

    1. 计算射击点到靶心的距离。
    2. 遍历每个环,判断射击点是否在该环内。
    3. 返回对应的得分,如果超出所有环则返回0分。

代码总结

  1. 类和方法定义

    • 定义了一个名为 Main 的类。
    • 在 Main 类中定义了一个静态方法 solution,用于计算射击得分。
  2. 方法功能

    • solution 方法接收两个整数参数 x 和 y,表示射击点的坐标。
    • 计算射击点到靶心 (0, 0) 的距离,使用公式 distance = Math.sqrt(x * x + y * y)
    • 使用一个循环从内到外遍历每个环(从1到10),判断射击点是否在该环内。
    • 如果射击点在某个环内,则返回对应的得分 11 - i
    • 如果射击点超出所有环,则返回0分。
  3. 主方法

    • main 方法用于测试 solution 方法的正确性。
    • 通过调用 solution 方法并打印结果,验证代码的正确性。