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 }
  • 相关阅读:
    18天,也能让ERP步入新世界
    VB.NET显示Internet上的图片
    首页增强外挂 vBulltein 3.5.x/3.6.x
    简繁互相切换的字库(比较全)
    delphi 使用者的一个好工具
    sql语句的一些参考
    错误2203,安装中的用户权限问题
    音响的灵魂! 世界顶级扬声器品牌介绍
    Pocket PC程序安装
    清理数据库挂马代码
  • 原文地址:https://www.cnblogs.com/sssy/p/6613620.html
Copyright © 2011-2022 走看看