二分法:仅WA了第三个点,求大佬帮忙qwq
查看原帖
二分法:仅WA了第三个点,求大佬帮忙qwq
788115
chocococoooo楼主2024/3/9 11:21
  • 枚举区间,区间内做二分,WA了第三个点,求大佬帮忙qwq
#include <iostream>
#include <algorithm>
using namespace std;

double a,b,c,d;

inline double f(double x){
    return a*x*x*x+b*x*x+c*x+d;
}

int main(){
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    //枚举每一个区间
    for(int i=-3;i<=100;i++){
        double l=i;
        double r=i+1;
        double fl=f(l);
        double fr=f(r);
        //区间内没有解
        //左端点值为0
        if(fl==0){
            //cout << i << endl;
            printf("%.2f ",l);
            continue;
        }
//        右端点不输出,因为会和循环i+1重复
//        解在区间i,i+1中,二分求解
        if(fl*fr>=0) continue;//注意,需要包含等于0的情况:用于去重
        while(r-l>1e-4){
            double mid=(l+r)/2;
            if(f(mid)*f(r)<=0){
                l=mid;
            }else{
                r=mid;
            }
        }
        //cout << i << endl;
        printf("%.2f ",r);
    }
    return 0;
}
2024/3/9 11:21
加载中...