照着题解第一个写的结果2,4 TLE,求帮忙看看

P1024 [NOIP2001 提高组] 一元三次方程求解

二分浮点数里面的while(r-1>=0.001)是什么鬼? 然后是程序里的if(res1==0)也不合理。可以考虑#define eps 1e-4(eps是epsilon,高数里经常用它表示一个很小的数字)然后用fabs(f(x)) < eps(需要用头文件cmath,fabs是取绝对值的意思)去判定是不是解。
by kagome @ 2024-02-18 23:52:44


```cpp #include <bits/stdc++.h> #define endl '\n' using namespace std; double a,b,c,d; //函数表达式 double fun(double x){ return a*x*x*x + b*x*x + c*x + d; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> a >> b >> c >> d; double left,right; int nums=0;//记录个数 for (int i = -100; i < 100; ++i) { left=i; right=i+1; double x1= fun(left); double x2= fun(right); if (x1==0){//检查左端点是否为0 cout << fixed << setprecision(2)<<left<<" "; nums++; } if (x1*x2<0){ while (right-left>=0.001){ double mid=(left+right)/2; if (fun(mid)* x2<=0){ left=mid; }else{ right=mid; } } cout << fixed << setprecision(2)<<right<<" "; nums++; } if (nums==3){ break; } } return 0; } ```
by ldywayne @ 2024-03-15 22:12:44


|