深基书上条件是if (fabs(f(i)) < eps 然而实际上这样是75分。 改成if (f(mid) == 0)就过了
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
double a, b, c, d;
const double eps = 1e-4;
double f(double x) {
return a * x * x * x + b * x * x + c * x + d;
}
double find(double l, double r) {
while (r - l > eps) {
double mid = (l + r) / 2;
if (f(mid) == 0)
return mid;
if (f(l) * f(mid) < 0)
r = mid;
else
l = mid;
}
return l;
}
int main() {
cin >> a >> b >> c >> d;
int mark = 0;
for (double i = -100; i < 100&&mark != 3; i++) {
if (f(i)==0) { // 使用 fabs 函数来比较浮点数是否接近零
printf("%.2lf ", i);
mark++;
continue;
}
if (f(i) * f(i + 1) < 0) {
printf("%.2lf ", find(i,i+1));
mark++;
}
}
return 0;
}
看题解大多也是if(f(mid) == 0) 到底用哪个