欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Luogu P1024 一元三次方程求解 题解

程序员文章站 2022-03-02 23:03:56
...

Luogu P1024 一元三次方程求解

乍一看,不会,在仔细一看,不就枚举嘛
50分代码:

#include<stdio.h>
using namespace std;
int a,b,c,d;
double js(int x){
    double ret;
    ret=(double)a*x/1000*x/1000*x/1000;
    ret+=(double)b*x/1000*x/1000;
    ret+=(double)c*x/1000;
    ret+=(double)d;
    return ret;
}
double ans[10];
int cnt;
int main(){
    scanf("%d%d%d%d",&a,&b,&c,&d);
    for(int i=-100000;i<=100000;i++){
        if(js(i)<0&&js(i+1)>0)ans[cnt++]=i/1000.0;
        if(js(i)>0&&js(i+1)<0)ans[cnt++]=i/1000.0;
        if(js(i)==0)ans[cnt++]=i/1000.0;
    }
    for(int i=0;i<cnt;i++){
        printf("%.2lf ",ans[i]);
    }
    return 0;
}

调试下立马发现问题:

一行,44个实数A,B,C,DA,B,C,D。

AC代码:

#include<stdio.h>
using namespace std;
double a,b,c,d;
double js(int x){
    double ret;
    ret=(double)a*x/1000*x/1000*x/1000;
    ret+=(double)b*x/1000*x/1000;
    ret+=(double)c*x/1000;
    ret+=(double)d;
    return ret;
}
double ans[10];
int cnt;
int main(){
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    for(int i=-100000;i<=100000;i++){
        if(js(i)<0&&js(i+1)>0)ans[cnt++]=i/1000.0;
        if(js(i)>0&&js(i+1)<0)ans[cnt++]=i/1000.0;
        if(js(i)==0)ans[cnt++]=i/1000.0;
    }
    for(int i=0;i<cnt;i++){
        printf("%.2lf ",ans[i]);
    }
    return 0;
}