B题2000~2050
B2053 求一元二次方程
题目描述
利用公式 :
$$x_1=\frac{-b+\sqrt{b^2-4ac}}{2a} , x_2=\frac{-b-\sqrt{b^2-4ac}}{2a}$$
求一元二次方程 $ax^2+bx+c=0$ 的根,其中 $a$ 不等于 $0$。结果要求精确到小数点后 $5$ 位。
输入格式
输入一行,包含三个浮点数 $a,b,c$(它们之间以一个空格分开),分别表示方程 $ax^2+bx+c=0$ 的系数。
输出格式
输出一行,表示方程的解。
若两个实根相等,则输出形式为:x1=x2=aaaa;
若两个实根不等,在满足根小者在前的原则,则输出形式为:x1=aaaa;x2=bbbb;
若无实根输出 No answer!。
所有输出部分要求精确到小数点后 $5$ 位,数字、符号之间没有空格。
样例 #1
样例输入 #1
-15.97 19.69 12.02
样例输出 #1
x1=-0.44781;x2=1.68075
题解
//���Ҫ��ȷ��С����� 5 λ
//1.С����ǰ��
//2.������
//3.��ʵ�����
//���
//����
#include <iostream>
#include<cmath>
#include <cstdio>
#include <iomanip>
using namespace std;
int main()
{
double a, b, c;
double x1, x2, delta;
cin >> a >> b >> c;
delta = b * b - 4 * a * c; //delta
if (delta < 0)
{
cout << "No answer!\n";
return 0;
}
else if (delta == 0)
{
x1 = x2 = (-b) / (2 * a);
//cout << "x1=x2=" << x1 << '\n';
printf("x1=x2=%.5lf\n", x1);
return 0;
}
else
{
x1 = (-b - sqrt(delta)) / (2 * a);
x2 = (-b + sqrt(delta)) / (2 * a);
if (x1 > x2) swap(x1, x2);
//cout << "x1=" <<setprecision(5)<< x1 << ";" << "x2=" <<setprecision(5)<<x2 << '\n';
printf("x1=%.5f;x2=%.5lf\n", x1, x2);
}
}
总结
这题说不上难吧,主要就是要考虑到精度问题,然后注意输出是先小后大即可。

浙公网安备 33010602011771号