您的位置:首页 > 其它

NOIP2001 提高组 复赛 一元三次方程求解

2017-01-07 17:55 155 查看
NOIP2001 提高组 复赛  一元三次方程求解

1.采用枚举的方式,因保留小数点后两位,故每次变量增加0.01

2.要注意浮点运算存在误差,故,相减<0.000001

3.按照题目要求编好程序,依次求出x1,x2,x3,没用到提示内容,觉得挺奇怪的。

4.样例通过后,提交AC,没觉得题目有什么特别,怎么会显示难度:普及/提高-

难度:简单

时间:20分钟

附上AC代码,编译环境Dev-C++4.9.9.2

//2001 fcqj

#include <stdio.h>

#include <math.h>

double a,b,c,d;

double f(double x){

    int i;

    double ans=0;

    double y;

    

    y=1;

    for(i=1;i<=3;i++)

        y*=x;

    y*=a;

    ans+=y;

    

    y=1;

    for(i=1;i<=2;i++)

        y*=x;

    y*=b;

    ans+=y;

    

    y=1;

    y*=x;

    y*=c;

    ans+=y;

    

    ans+=d;

    return ans;

}

int main(){

    double x,x1,x2,x3;

    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);

    x=-100;

    while(x-100<=0.000001){

        if(fabs(f(x))<=0.000001)

            break;

        x+=0.01;

    }

    x1=x;

    

    x+=0.01;

    while(x-100<=0.000001){

        if(fabs(f(x))<=0.000001)

            break;

        x+=0.01;

    }

    x2=x;

    

    x+=0.01;

    while(x-100<=0.000001){

        if(fabs(f(x))<0.000001)

            break;

        x+=0.01;

    }

    x3=x;

    printf("%.2lf %.2lf %.2lf\n",x1,x2,x3);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: