青训营—小E的射击训练

216 阅读1分钟

题目描述

小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

思路

  1. 计算距离:首先,我们需要计算射击点 (x, y) 到靶心 (0, 0) 的距离。这个距离可以通过勾股定理计算得出。

  2. 判断得分: 如果 r 大于10,得分为0。 如果 r 在 [1, 10] 之间,则得分为 11 - r。由于得分必须是整数,我们可以将 r 向下取整。

  3. 实现代码:根据上述思路,可以实现一个简单的函数来计算得分。

Java代码

public class Main {
    public static int solution(int x, int y) {
        // write code here
        double r = Math.sqrt(x * x + y * y);
        if (r > 10) {
            return 0;
        } else {
            return (int)(11 - r);
        }
    }

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

复杂度分析

时间复杂度:O(1),只进行了一次距离计算和简单的条件判断。

空间复杂度:O(1),只使用了常量级别的额外空间。