zoukankan      html  css  js  c++  java
  • SDNU 1416.一元三次方程求解(数学)

    Description

    有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值> =1。要求三个实根。

    Input

    四个实数:a,b,c,d 

    Output

    由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位 

    Sample Input

    1  -5  -4  20

    Sample Output

    -2.00  2.00  5.00

    Hint

    数据规模和约定
    |a|,|b|,|c|,|d|< =10
    1.盛金公式
    一元三次方程aX3+bX2+cX+d=0,(a,b,c,dR,且a≠0)
    重根判别式
    总判别式Δ=B2-4AC
    A=B=0时,
    盛金公式1:
    Δ=B2-4AC>0时,
    盛金公式2:
    盛金公式2的三角式:
    其中
    Δ=B2-4AC=0时,
    盛金公式3:
    其中
    Δ=B2-4AC<0时,
    盛金公式4:
    其中
    A>0,-1<T<1)。
    2.盛金判别法
    A=B=0时,方程有一个三重实根。
    当Δ=B2-4AC>0时,方程有一个实根和一对共轭虚根。
    当Δ=B2-4AC=0时,方程有三个实根,其中有一个二重根。
    当Δ=B2-4AC<0时,方程有三个不相等的实根。
    3.盛金定理
    b=0,c=0时,盛金公式1无意义;当A=0时,盛金公式3无意义;当A≤0时,盛金公式4无意义;当T<-1或T>1时,盛金公式4无意义。
    b=0,c=0时,盛金公式1是否成立?盛金公式3与盛金公式4是否存在A≤0的值?盛金公式4是否存在T<-1或T>1的值?盛金定理给出如下回答:
    盛金定理1:当A=B=0时,若b=0,则必定有c=d=0(此时,方程有一个三重实根0,盛金公式1仍成立)。
    盛金定理2:当A=B=0时,若b≠0,则必定有c≠0(此时,适用盛金公式1解题)。
    盛金定理3:当A=B=0时,则必定有C=0(此时,适用盛金公式1解题)。
    盛金定理4:当A=0时,若B≠0,则必定有Δ>0(此时,适用盛金公式2解题)。
    盛金定理5:当A<0时,则必定有Δ>0(此时,适用盛金公式2解题)。
    盛金定理6:当Δ=0时,若A=0,则必定有B=0(此时,适用盛金公式1解题)。
    盛金定理7:当Δ=0时,若B≠0,盛金公式3一定不存在A≤0的值(此时,适用盛金公式3解题)。
    盛金定理8:当Δ<0时,盛金公式4一定不存在A≤0的值。(此时,适用盛金公式4解题)。
    盛金定理9:当Δ<0时,盛金公式4一定不存在T≤-1或T≥1的值,即T出现的值必定是-1<T<1。
    显然,当A≤0时,都有相应的盛金公式解题。
    注意:盛金定理逆之不一定成立。如:当Δ>0时,不一定有A<0。
    盛金定理表明:盛金公式始终保持有意义。任意实系数的一元三次方程都可以运用盛金公式直观求解。
    #include <cstdio>
    #include <iostream>
    #include <cmath>
    #include <string>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <map>
    using namespace std;
    #define ll long long
    const int inf = 0x3f3f3f3f;
    const int mod = 1e9+7;
    
    int main()
    {
         double a,b,c,d;
         double as,bs,t,si;
         double x1,x2,x3;
         cin>>a>>b>>c>>d;
         as=b*b-3*a*c;
         bs=b*c-9*a*d;
         t=(2*as*b-3*a*bs)/(2*sqrt(as*as*as));
         si=acos(t);
         x1=(-b-2*sqrt(as)*cos(si/3))/(3*a);
         x2=(-b+sqrt(as)*(cos(si/3)+sqrt(3)*sin(si/3)))/(3*a);
         x3=(-b+sqrt(as)*(cos(si/3)-sqrt(3)*sin(si/3)))/(3*a);
         cout<<fixed<<setprecision(2)<<x1<<" ";
         cout<<fixed<<setprecision(2)<<x3<<" ";
         cout<<fixed<<setprecision(2)<<x2<<endl;
         return 0;
    }
  • 相关阅读:
    Harbor私有镜像仓库(下)
    项目课---企业级Memcached服务应用实践(八)
    项目课---OpVEN架构实施方案(七)
    项目课---Mha-Atlas-MySQL高可用方案实践(六)
    Nginx 反向代理
    Ansible搭建LNMP
    Ansible
    Ansible运维自动化
    JAVA企业级应用服务器之TOMCAT实战
    ssh自动分发密匙脚本样板
  • 原文地址:https://www.cnblogs.com/RootVount/p/11255320.html
Copyright © 2011-2022 走看看