题目
小E正在训练场进行射击练习,靶有10个环,靶心位于坐标(0, 0)。每个环对应不同的得分,靶心内(半径为1)得10分,依次向外的每个环分数减少1分。若射击点在某个半径为i的圆内,则得11-i分。如果射击点超出所有的环,则得0分。
根据给定的射击坐标(x, y),请计算小E的射击得分。
代码思路
- 计算距离:首先计算射击点
(x, y)到靶心(0, 0)的距离。使用欧几里得距离公式distance = Math.sqrt(x * x + y * y)。 - 判断得分:使用一个循环从内到外遍历每个环(从1到10),判断射击点是否在该环内。如果射击点在某个环内,则返回对应的得分
11 - i。 - 返回结果:如果射击点超出所有环,则返回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. **判断得分**:
- 使用一个循环从内到外遍历每个环(从1到10),判断射击点是否在该环内。
- 如果射击点在某个环内,则返回对应的得分 `11 - i`。
1. **返回结果**:
- 如果射击点超出所有环,则返回0分。
代码功能解释
-
计算射击点到靶心的距离:
- 使用欧几里得距离公式
distance = Math.sqrt(x * x + y * y)计算射击点(x, y)到靶心(0, 0)的距离。
- 使用欧几里得距离公式
-
判断得分:
- 使用一个循环从内到外遍历每个环(从1到10),判断射击点是否在该环内。
- 如果射击点在某个环内,则返回对应的得分
11 - i。
-
返回结果:
- 如果射击点超出所有环,则返回0分。
代码功能总结
-
输入:射击点的坐标
(x, y)。 -
输出:射击得分,根据射击点与靶心的距离计算得出。
-
逻辑:
- 计算射击点到靶心的距离。
- 遍历每个环,判断射击点是否在该环内。
- 返回对应的得分,如果超出所有环则返回0分。
代码总结
-
类和方法定义:
- 定义了一个名为
Main的类。 - 在
Main类中定义了一个静态方法solution,用于计算射击得分。
- 定义了一个名为
-
方法功能:
solution方法接收两个整数参数x和y,表示射击点的坐标。- 计算射击点到靶心
(0, 0)的距离,使用公式distance = Math.sqrt(x * x + y * y)。 - 使用一个循环从内到外遍历每个环(从1到10),判断射击点是否在该环内。
- 如果射击点在某个环内,则返回对应的得分
11 - i。 - 如果射击点超出所有环,则返回0分。
-
主方法:
main方法用于测试solution方法的正确性。- 通过调用
solution方法并打印结果,验证代码的正确性。