定义一元三次方程
double equation(double a, double b, double c, double d, double x) {
return a * x * x * x + b * x * x + c * x + d;
}
// 二分法查找根
double binarySearch(double a, double b, double c, double d, double left, double right) {
double mid;
while (right - left >= 1e-6) {
mid = (left + right) / 2;
if (equation(a, b, c, d, left) * equation(a, b, c, d, mid) <= 0) {
right = mid;
} else {
left = mid;
}
}
return mid;
}
int main() {
double a, b, c, d;
std::cin >> a >> b >> c >> d;
int count = 0;
for (int i = -100; i < 100; ++i) {
double left = i;
double right = i + 1;
double fa = equation(a, b, c, d, left);
double fb = equation(a, b, c, d, right);
if (fa == 0) {
std::cout << std::fixed << std::setprecision(2) << left;
++count;
if (count < 3) {
std::cout << " ";
}
} else if (fa * fb < 0) {
double root = binarySearch(a, b, c, d, left, right);
std::cout << std::fixed << std::setprecision(2) << root;
++count;
if (count < 3) {
std::cout << " ";
}
}
}
// 处理最后一个根恰好是 100 的情况
if (equation(a, b, c, d, 100) == 0) {
if (count < 3) {
std::cout << " ";
}
std::cout << std::fixed << std::setprecision(2) << 100.00;
}
std::cout << std::endl;
return 0;
}
/**************************************************************
Problem: 1692
User: panyuchen
Language: C++
Result: Compile Error
****************************************************************/