藍橋杯一元三次方程求解
阿新 • • 發佈:2019-01-04
問題描述
有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的係數(a,b,c,d 均為實數),並約定該方程存在三個不同實根(根的範圍在-100至100之間),且根與根之差的絕對值>=1。要求三個實根。。
輸入格式
四個實數:a,b,c,d
輸出格式
由小到大依次在同一行輸出這三個實根(根與根之間留有空格),並精確到小數點後2位
樣例輸入
1-5 -4 20
樣例輸出
-2.00 2.005.00
解題思路:
根的範圍在-100--100之間,且要精確到後倆位,我們可以把根的範圍過大100倍,x1=(x-0.05)/100,x2=(x+0.05)/100,根據根的特點可以確定f(x1)*f(x2)<0,
#include<cstdio> float a,b,c,d; float f(float x){ return x*x*x+b*1.00/a*x*x+c*1.00/a*x+d*1.00/a; } int main(){ scanf("%f%f%f%f",&a,&b,&c,&d); for(int x=-10000;x<10000;x++){ //精確到後兩位,則在這裡擴大到100倍 float x1=(x-0.05)*1.00/100,x2=(x+0.05)*1.00/100; //擴大了100倍要除回來 if(f(x1)*f(x2)<0) printf("%.2f ",x*1.00/100); } printf("\n"); return 0; }