• 一元三次方程求解


    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程。

    给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。

    输入
    一行,包含四个实数a,b,c,d,相邻两个数之间用单个空格隔开。
    输出
    一行,包含三个实数,为该方程的三个实根,按从小到大顺序排列,相邻两个数之间用单个空格隔开,精确到小数点后2位。
    样例输入
    1.0 -5.0 -4.0 20.0
    样例输出
    -2.00 2.00 5.00
    来源
    NOIP2001复赛 提高组 第一题
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const double eps=0.0001;
     4 double a,b,c,d;
     5 inline double calc(double x){
     6     double h=a*x*x*x+b*x*x+c*x+d;
     7     return h;
     8 }
     9 double ans[5];
    10 inline void find(double,double);
    11 int sum;
    12 int main(){
    13     scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    14     for(int i=-101;i<=101;i++){
    15         double tmp1=calc((double)i);
    16         double tmp2=calc(double(i+1));
    17         if(tmp1==0){
    18             ans[++sum]=(double)i;
    19         } 
    20         else if(tmp2==0){
    21             ans[++sum]=(double)(i+1);
    22             i++;
    23         } 
    24         else if(tmp1*tmp2<0){
    25             find((double)i,(double)i+1);
    26         }
    27         if(sum==3){
    28             printf("%.2lf %.2lf %.2lf",ans[1],ans[2],ans[3]);
    29             return 0;
    30         }
    31     }
    32     
    33     return 0;
    34 }
    35 inline void find(double l,double r){
    36     if(r-l<=eps){
    37         ans[++sum]=(l+r)/(double)2;
    38         return ;
    39     }
    40     double mid=(l+r)/(double)2;
    41     double tmp=calc(mid);
    42     double tmpl=calc(l); 
    43     double tmpr=calc(r);
    44     if(tmp==0){
    45         ans[++sum]=tmp;
    46         return ;
    47     }
    48     else if(tmp*tmpl<0){
    49         find(l,mid);
    50     }
    51     else if(tmp*tmpr<0){
    52         find(mid,r);
    53     }
    54 }
  • 相关阅读:
    线性表——(2)单向链表
    线性表——(1)顺序表
    UVa 1592 数据库
    UVa 12096 集合栈计算机
    Python 协程
    Python 多线程及进程
    Python 日志(Log)
    Python 函数式编程
    Python基础
    DB2 获取前两天的数据
  • 原文地址:https://www.cnblogs.com/CXCXCXC/p/4903288.html
Copyright © 2020-2023  润新知