1 #include<cstdio> 2 #define zx author 3 using namespace std; 4 double a,b,c,d; 5 double f(double x) 6 { 7 return a * x * x * x + b * x * x + c * x + d; 8 } 9 void erfen(double l,double r) 10 { 11 double mid = (l + r) / 2; 12 13 if(r - l <= 0.01) 14 { 15 if(f(l) * f(r) < 0) 16 { 17 18 printf("%.2lf ",mid); 19 } 20 return; 21 } 22 erfen(l,mid); 23 erfen(mid,r); 24 25 } 26 int main() 27 { 28 freopen("equation.in","r",stdin); 29 freopen("equation.out","w",stdout); 30 scanf("%lf%lf%lf%lf",&a,&b,&c,&d); 31 erfen(-100,100); 32 return 0; 33 }
*****二分每一段寻找答案,根据提示,找到小于0的区间就可以继续搜索啦。
一元三次方程求解
Equation.pas/cpp
题目描述:
形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的
系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100
至100 之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这
三个实根(根与根之间留有空格),并精确到小数点后4 位。
提示:记方程f(x)=ax3+bx2+cx+d,若存在2 个数x1 和x2,且x1<x2,
f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个根。
输入格式:
一行四个实数a,b,c,d
输出格式:
从小到大输出三个根,每个根保留两位小数,中间用空格隔开。
样例:
输入:1 -5 -4 20
输出:-2.00 2.00 5.00