问题描述
求解方程ax2+bx+c=0的根。要求a, b, c由用户输入,并且可以为任意实数。
输入格式:输入只有一行,包括三个系数,之间用空格格开。
输出格式:输出只有一行,包括两个根,大根在前,小根在后,无需考虑特殊情况,保留小数点后两位。
输入输出样例
样例输入
2.5 7.5 1.0
样例输出
-0.14 -2.86
分析:1.若 x1<x2,且f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个根
2.找到一个区间内的根,二分逼近,找到误差很小的近似根,可认为是根
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <cmath> #include <iostream> using namespace std; double a, b, c; double f(double x) { return a * x * x + b * x + c; } double find(double x, double y) { if (y - x < 0.000001) return x; double mid = (x + y) / 2; if (f(mid) == 0) return mid; else if (f(mid) * f(x) > 0) return find(mid, y); else return find(x, mid); } int main() { cin >> a >> b >> c; double mid = -1 * b / (2 * a); double ans1 = find(-9999999, mid); double ans2 = find(mid, 99999999); if (abs(ans1 - 0) < 0.0001) ans1 = 0; if (abs(ans2 - 0) < 0.0001) ans2 = 0; printf("%.2f %.2f", ans2, ans1); return 0; } |
❤ 点击这里 -> 订阅《PAT | 蓝桥 | LeetCode学习路径 & 刷题经验》by 柳婼