SDNU 1416.一元三次方程求解(数学)

mac2022-06-30  20

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,d∈R,且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; }

 

转载于:https://www.cnblogs.com/RootVount/p/11255320.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)