zoukankan      html  css  js  c++  java
  • 1038 一元三次方程求解 2001年NOIP全国联赛提高组

    题目描述 Description

    有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。
    提示:记方程f(x)=0,若存在2个数x1和x2,且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个 根。

    输入描述 Input Description

    一个三次方程的各项系数

    输出描述 Output Description

    三个解

    样例输入 Sample Input

    1   -5   -4   20

    样例输出 Sample Output

    -2.00   2.00   5.00

    数据范围及提示 Data Size & Hint
     
     1 #include<queue>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 using namespace std;
     7 double a,b,c,d;int num=0;
     8 double f(double x)
     9 {
    10     return a*x*x*x+b*x*x+c*x+d;
    11 }
    12 void dfs(double l,double r)
    13 {
    14     if((r-l)<=0.001) 
    15     {
    16         printf("%.2lf ",l);
    17         return;
    18     }
    19     double mid=(l+r)/2;
    20     if(f(l)*f(mid)<=0)dfs(l,mid);
    21     else dfs(mid,r);
    22 }
    23 int main()
    24 {
    25     scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    26     for(int i=-100;i<100;i++) 
    27     {
    28         double l=i,r=i+1;
    29         if(f(l)==0)
    30         printf("%.2lf ",l);
    31         else if(f(l)*f(r)<0)
    32         {
    33             dfs(l,r);
    34             num++;
    35         }
    36         if(num==3)break;
    37     }
    38     return 0;
    39 }
  • 相关阅读:
    7.Mongodb安全性流程
    6.Mongodb索引
    5.Mongodb聚合
    8-进程管理
    7-安装包管理
    6-文件系统
    5-权限用户组
    27-ATM+购物车程序
    26.本章小结
    名词解释
  • 原文地址:https://www.cnblogs.com/sssy/p/6613620.html
Copyright © 2011-2022 走看看