问题描述
小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;
}
思路分析
-
计算距离:
- 首先,计算点(
x,y)到原点的欧几里得距离d,公式为:d = sqrt(x^2 + y^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分。
- 距离
- 根据计算出的距离
逐句分析
-
#include <iostream>:
引入输入输出流库,用于处理标准输入输出操作。 -
#include <cmath>:
引入数学库,用于使用数学函数(如sqrt)。 -
// 计算距离的函数:
这是一个注释,解释了calculateDistance函数的功能。 -
double calculateDistance(double x, double y) {:
定义了一个名为calculateDistance的函数,该函数接受两个双精度浮点数x和y作为输入,并返回一个双精度浮点数。 -
return std::sqrt(x * x + y * y);:
返回点(x,y)到原点的欧几里得距离,通过公式sqrt(x^2 + y^2)计算。 -
}:
结束calculateDistance函数的定义。 -
int solution(int x, int y) {:
定义了一个名为solution的函数,该函数接受两个整数x和y作为输入,并返回一个整数。 -
double distance = calculateDistance(x, y);:
调用calculateDistance函数计算点(x,y)到原点的距离,并将结果存储在变量distance中。 -
if (distance <= 1.0) {:
检查distance是否小于等于1.0。 -
return 10;:
如果distance小于等于1.0,返回10分。 -
} else if (distance <= 2.0) {:
如果distance大于1.0且小于等于2.0。 -
return 9;:
如果distance小于等于2.0,返回9分。 -
} else if (distance <= 3.0) {:
如果distance大于2.0且小于等于3.0。 -
return 8;:
如果distance小于等于3.0,返回8分。 -
} else if (distance <= 4.0) {:
如果distance大于3.0且小于等于4.0。 -
return 7;:
如果distance小于等于4.0,返回7分。 -
} else if (distance <= 5.0) {:
如果distance大于4.0且小于等于5.0。 -
return 6;:
如果distance小于等于5.0,返回6分。 -
} else if (distance <= 6.0) {:
如果distance大于5.0且小于等于6.0。 -
return 5;:
如果distance小于等于6.0,返回5分。 -
} else if (distance <= 7.0) {:
如果distance大于6.0且小于等于7.0。 -
return 4;:
如果distance小于等于7.0,返回4分。 -
} else if (distance <= 8.0) {:
如果distance大于7.0且小于等于8.0。 -
return 3;:
如果distance小于等于8.0,返回3分。 -
} else if (distance <= 9.0) {:
如果distance大于8.0且小于等于9.0。 -
return 2;:
如果distance小于等于9.0,返回2分。 -
} else if (distance <= 10.0) {:
如果distance大于9.0且小于等于10.0。 -
return 1;:
如果distance小于等于10.0,返回1分。 -
} else {:
如果distance大于10.0。 -
return 0;:
如果distance大于10.0,返回0分。 -
}:
结束if-else语句。 -
return 0;:
这一行代码是多余的,因为函数已经在上一步返回了结果。 -
}:
结束solution函数的定义。 -
int main() {:
定义了main函数,这是程序的入口点。 -
//cout << (solution(1, 0) == 10) << endl;:
注释掉的代码,用于测试solution(1, 0)是否返回10。 -
//cout << (solution(1, 1) == 9) << endl;:
注释掉的代码,用于测试solution(1, 1)是否返回9。 -
//cout << (solution(0, 5) == 6) << endl;:
注释掉的代码,用于测试solution(0, 5)是否返回6。 -
//cout << (solution(3, 4) == 6) << endl;:
注释掉的代码,用于测试solution(3, 4)是否返回6。 -
return 0;:
程序正常结束,返回值为0。 -
}:
结束main函数的定义。