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

最近失恋了(其实只是被单方面丑拒罢了),二分查找感觉有多种情况,左右端点是否是开区间,特判之后,有要求第一个出现的位置;有普通的二分查找到那个整数;有查找到需要的精度……
且判断循环的依据都是l<=r

double a,b,c,d;
double x1,x2;
double l,mid,r;
double f(double x) {
    return a*x*x*x+b*x*x+c*x+d;
}

int main() {
    cin>>a>>b>>c>>d;
    
    for(int i=-100;i<100;i++) {
        l=i;r=i+1;
        x1=f(l);x2=f(r);
        if(!x1) cout<<fixed<<setprecision(2)<<l<<' ';
        if(x1*x2<0) {
            while(r-l>=0.001) {
                mid=(l+r)/2;
                if(f(r)*f(mid)<=0) l=mid;
                else r=mid;
            }
            cout<<fixed<<setprecision(2)<<r<<' ';//l也可以ac
        }
    }
    return 0;
}

你可能感兴趣的:(算法,c++)