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

· · 题解

题目传送门。

题目分析

思路

看数据范围并不大,考虑暴力,根据题目所给公式 a^3+b^2+cx+d=0,在数据范围内枚举 x 的值,如果结果与答案相差极小保留两位小数以后就是答案,循环时 i 每次加上 0.01 来枚举,不就完美解决了吗

但是这样误差太大了,因此要换成更小的数,for(double i=-100;i<=100;i+=0.00001) 就足够了。

Code

#include<bits/stdc++.h>
using namespace std;
int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    for(double i=-100;i<=100;i+=0.00001){//注意精度
        if(abs((i*i*i*a)+(i*i*b)+(i*c)+d)<0.00001){//根据公式找到大概的值
            cout<<fixed<<setprecision(2)<<i<<" ";//保留两位小数输出
        }
    }
    return 0;
}