题目:
Solution:
简单解法,直接调用库函数:
#include <iostream>
#include <cmath>
#include <iomanip>
int main() {
double n;
std::cin >> n;
double result = std::cbrt(n); // 使用cbrt函数求解三次方根
std::cout << std::fixed << std::setprecision(6) << result << std::endl;
return 0;
}
二分法思想:
#include <iostream>
#include <cmath>
#include <iomanip>
double cubeRoot(double n) {
double left = -10000.0; // 三次方根的范围可以根据实际情况调整
double right = 10000.0;
double epsilon = 1e-9; // 精度控制
while (right - left > epsilon) {
double mid = (left + right) / 2;
double cube = mid * mid * mid;
if (cube < n)
left = mid;
else
right = mid;
}
return left;
}
int main() {
double n;
std::cin >> n;
double result = cubeRoot(n);
std::cout << std::fixed << std::setprecision(6) << result << std::endl;
return 0;
}
梯度下降法思想:(就是机器学习里的GD,但是没有learning rate)
#include <iostream>
#include <cmath>
#include <iomanip>
double cubeRoot(double n) {
double x = n; // 初始猜测值
// 迭代计算直到满足精度要求
while (true) {
double fx = x * x * x - n; // 函数值
double fpx = 3 * x * x; // 导数值
double delta = fx / fpx; // 更新步长
x = x - delta; // 更新猜测值
if (std::abs(delta) < 1e-6) // 判断精度要求
break;
}
return x;
}
int main() {
double n;
std::cin >> n;
double result = cubeRoot(n);
std::cout << std::fixed << std::setprecision(6) << result << std::endl;
return 0;
}