CF630N 题解

· · 题解

题目大意

给出 a,b,c,求一元二次方程 ax^2+bx+c=0 的解。保证有两个不相等的实数根。

解法

一元二次方程的判别式:设 \Delta =\mathop{{b}}\nolimits^{{2}}-4ac,那么:

\Delta \gt 0 & \text{方程有两个不相等的实根} \\ \Delta = 0 & \text{方程有两个相等的实根} \\ \Delta \lt 0 & \text{方程没有实数解} \end{matrix}\right.

不过这道题保证了有两个不相等的实数根,就不用判断了。然后就是求根公式:

x_1=\dfrac{-b+\sqrt[]{\Delta} }{2a} \\ x_2=\dfrac{-b-\sqrt[]{\Delta} }{2a} \end{cases}

我们把所有变量开成 double,扔到公式里面计算即可。最后比较大小,先输出大的根。代码如下:

double a,b,c,delta,sol1,sol2; 
signed main(){
    cin>>a>>b>>c;
    delta=sqrt(b*b-4*a*c);
    sol1=(-b+delta)/(2*a),sol2=(-b-delta)/(2*a);
    if(sol1<sol2) swap(sol1,sol2);//比较大小
    printf("%.12lf\n%.12lf\n",sol1,sol2);
    return 0;
}