描述
形如: ax^3+bx^2+cx+d=0 这样的三次方程,给出该方程中各项的系数(a,b,c,d均为实数),请求出该方程在指定范围内的一个根。
例如方程:2x^3+3x^2+4x+5=0,在[-10,10]范围内有一个根为-1.371134。
测试集给定的范围保证刚好有一个根。
比如输入:
1.2 -1.0 3.4 4.4
-3 0
则根为:-0.856541
又比如输入:
-1.2 2.3 4.4 -3
-3 0
则根为:-1.534508
格式
输入格式
两行实数,第一行为4个实数,分别代表a,b,c,d。第二行两个实数,表示左右区间。
输出格式
一个实数,表示方程的解,精确到小数点后6位。
样例
输入样例
输出样例
0.849809
限制
时间限制:100 ms
内存限制:16384 KB
提示
注意题目对精度和速度的要求
代码
#include<stdio.h>#include<math.h>int main(){double a,b,c,d;double x1,x2,x0,fx1,fx2,fx0,x,y;scanf("%lf %lf %lf %lf",&a,&b,&c,&d);scanf("%lf %lf",&x1, &x2);fx1=(( a * x1 + b) * x1 + c) * x1 + d;fx2=(( a * x2 + b) * x2 + c) * x2 + d;do{x0 = ( x1 + x2 ) / 2;fx0 = (( a * x0 + b) * x0 + c) * x0 + d;if( (fx0 * fx1) < 0 ){x2 = x0;fx2 = fx0;}else{x1 = x0;fx1 = fx0;}}while( fabs( fx0 ) >= 1e-7 ); //求根精度printf( "%lf", x0 );return 0;}
