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);
	}

}

总结

这题说不上难吧,主要就是要考虑到精度问题,然后注意输出是先小后大即可。

posted @ 2024-06-30 09:49  coreSoul  阅读(31)  评论(0)    收藏  举报