全wa!
查看原帖
全wa!
823847
xuanbrother楼主2024/4/25 18:55
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

double a,b,c,d;
double ans[10];
int cnt;
int fb;

double fc(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(double i=-100, j=-99; i<=99; i+=1,j+=1)
    {
        double x1=fc(i), x2=fc(j);
        if(x1==0)
        {
            ans[cnt++]=i;
            if(cnt==3) break;
            continue;
        }
        else if(x2==0)
        {
            ans[cnt++]=j;
            if(cnt==3) break;
            continue;
        }
        else if(x1*x2>0) continue;
        else if(x1*x2<0)
        {
            int flag;
            if(x1>0) flag=1; // 函数在这个区间内是下降的
            else flag=0;
            double l=i, r=j;
            double mid;
            while(r-l>=0.001)
            {
                mid=(l+r)/2;
                int x3=fc(mid);
                if(flag)
                {
                    if(x3==0)
                    {
                        ans[cnt++]=mid;
                        if(cnt==3) 
                        {
                            fb=1;
                            break;
                        }
                    }
                    else if(x3>0) l=mid;
                    else if(x3<0) r=mid;
                }
                else
                {
                    if(x3==0)
                    {
                        ans[cnt++]=mid;
                        if(cnt==3)
                        {
                            fb=1;
                            break;
                        }
                    }
                    else if(x3>0) r=mid;
                    else if(x3<0) l=mid;
                }
            }
            if(fb) break;
            if(fc(l)==0) 
            {
                ans[cnt++]=l;
                if(cnt==3) break;
            }
        }
    }
    
    for(int i=0; i<3; i++) printf("%.2lf ", ans[i]);
    return 0;
}
2024/4/25 18:55
加载中...