掘金刷题7 | 豆包MarsCode AI刷题

55 阅读4分钟

问题描述

小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

完整代码

#include <iostream>
#include <cmath>

// 计算距离的函数
double calculateDistance(double x, double y) {
    return std::sqrt(x * x + y * y);
}

int solution(int x, int y) {
    // write code here
        double distance = calculateDistance(x, y);
    if (distance <= 1.0) {
        return 10;  // 在半径为1的圆内
    } else if (distance <= 2.0) {
        return 9;   // 在半径为2的圆内
    } else if (distance <= 3.0) {
        return 8;   // 在半径为3的圆内
    } else if (distance <= 4.0) {
        return 7;   // 在半径为4的圆内
    } else if (distance <= 5.0) {
        return 6;   // 在半径为5的圆内
    } else if (distance <= 6.0) {
        return 5;   // 在半径为6的圆内
    } else if (distance <= 7.0) {
        return 4;   // 在半径为7的圆内
    } else if (distance <= 8.0) {
        return 3;   // 在半径为8的圆内
    } else if (distance <= 9.0) {
        return 2;   // 在半径为9的圆内
    } else if (distance <= 10.0) {
        return 1;   // 在半径为10的圆内
    } else {
        return 0;   // 超出所有环
    }
    return 0;
}

int main() {
    //cout << (solution(1, 0) == 10) << endl;
    //cout << (solution(1, 1) == 9) << endl;
    //cout << (solution(0, 5) == 6) << endl;
    //cout << (solution(3, 4) == 6) << endl;
    return 0;
}

思路分析

  1. 计算距离

    • 首先,计算点(x, y)到原点的欧几里得距离d,公式为:d = sqrt(x^2 + y^2)
  2. 根据距离返回分数

    • 根据计算出的距离d,判断该点落在哪个半径范围内,并返回相应的分数。分数规则如下:
      • 距离d ≤ 1.0,返回10分。
      • 1.0 < d ≤ 2.0,返回9分。
      • 2.0 < d ≤ 3.0,返回8分。
      • 3.0 < d ≤ 4.0,返回7分。
      • 4.0 < d ≤ 5.0,返回6分。
      • 5.0 < d ≤ 6.0,返回5分。
      • 6.0 < d ≤ 7.0,返回4分。
      • 7.0 < d ≤ 8.0,返回3分。
      • 8.0 < d ≤ 9.0,返回2分。
      • 9.0 < d ≤ 10.0,返回1分。
      • d > 10.0,返回0分。

逐句分析

  1. #include <iostream>:
    引入输入输出流库,用于处理标准输入输出操作。

  2. #include <cmath>:
    引入数学库,用于使用数学函数(如sqrt)。

  3. // 计算距离的函数:
    这是一个注释,解释了calculateDistance函数的功能。

  4. double calculateDistance(double x, double y) {:
    定义了一个名为calculateDistance的函数,该函数接受两个双精度浮点数xy作为输入,并返回一个双精度浮点数。

  5. return std::sqrt(x * x + y * y);:
    返回点(x, y)到原点的欧几里得距离,通过公式sqrt(x^2 + y^2)计算。

  6. }:
    结束calculateDistance函数的定义。

  7. int solution(int x, int y) {:
    定义了一个名为solution的函数,该函数接受两个整数xy作为输入,并返回一个整数。

  8. double distance = calculateDistance(x, y);:
    调用calculateDistance函数计算点(x, y)到原点的距离,并将结果存储在变量distance中。

  9. if (distance <= 1.0) {:
    检查distance是否小于等于1.0。

  10. return 10;:
    如果distance小于等于1.0,返回10分。

  11. } else if (distance <= 2.0) {:
    如果distance大于1.0且小于等于2.0。

  12. return 9;:
    如果distance小于等于2.0,返回9分。

  13. } else if (distance <= 3.0) {:
    如果distance大于2.0且小于等于3.0。

  14. return 8;:
    如果distance小于等于3.0,返回8分。

  15. } else if (distance <= 4.0) {:
    如果distance大于3.0且小于等于4.0。

  16. return 7;:
    如果distance小于等于4.0,返回7分。

  17. } else if (distance <= 5.0) {:
    如果distance大于4.0且小于等于5.0。

  18. return 6;:
    如果distance小于等于5.0,返回6分。

  19. } else if (distance <= 6.0) {:
    如果distance大于5.0且小于等于6.0。

  20. return 5;:
    如果distance小于等于6.0,返回5分。

  21. } else if (distance <= 7.0) {:
    如果distance大于6.0且小于等于7.0。

  22. return 4;:
    如果distance小于等于7.0,返回4分。

  23. } else if (distance <= 8.0) {:
    如果distance大于7.0且小于等于8.0。

  24. return 3;:
    如果distance小于等于8.0,返回3分。

  25. } else if (distance <= 9.0) {:
    如果distance大于8.0且小于等于9.0。

  26. return 2;:
    如果distance小于等于9.0,返回2分。

  27. } else if (distance <= 10.0) {:
    如果distance大于9.0且小于等于10.0。

  28. return 1;:
    如果distance小于等于10.0,返回1分。

  29. } else {:
    如果distance大于10.0。

  30. return 0;:
    如果distance大于10.0,返回0分。

  31. }:
    结束if-else语句。

  32. return 0;:
    这一行代码是多余的,因为函数已经在上一步返回了结果。

  33. }:
    结束solution函数的定义。

  34. int main() {:
    定义了main函数,这是程序的入口点。

  35. //cout << (solution(1, 0) == 10) << endl;:
    注释掉的代码,用于测试solution(1, 0)是否返回10。

  36. //cout << (solution(1, 1) == 9) << endl;:
    注释掉的代码,用于测试solution(1, 1)是否返回9。

  37. //cout << (solution(0, 5) == 6) << endl;:
    注释掉的代码,用于测试solution(0, 5)是否返回6。

  38. //cout << (solution(3, 4) == 6) << endl;:
    注释掉的代码,用于测试solution(3, 4)是否返回6。

  39. return 0;:
    程序正常结束,返回值为0

  40. }:
    结束main函数的定义。