#include <iostream> #include <iomanip> #include <cmath> // 定义一元三次方程 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: Accepted Time:4 ms Memory:2076 kb ****************************************************************/