藍橋網 演算法訓練 一元三次方程求解
阿新 • • 發佈:2019-02-02
問題描述
有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的係數(a,b,c,d 均為實數),並約定該方程存在三個不同實根(根的範圍在-100至100之間),且根與根之差的絕對值>=1。要求三個實根。。
輸入格式
四個實數:a,b,c,d
輸出格式
由小到大依次在同一行輸出這三個實根(根與根之間留有空格),並精確到小數點後2位
樣例輸入
1 -5 -4 20
樣例輸出
-2.00 2.00 5.00
資料規模和約定
有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的係數(a,b,c,d 均為實數),並約定該方程存在三個不同實根(根的範圍在-100至100之間),且根與根之差的絕對值>=1。要求三個實根。。
輸入格式
四個實數:a,b,c,d
輸出格式
由小到大依次在同一行輸出這三個實根(根與根之間留有空格),並精確到小數點後2位
樣例輸入
1 -5 -4 20
樣例輸出
-2.00 2.00 5.00
資料規模和約定
|a|,|b|,|c|,|d|<=10
AC程式碼:
# include <stdio.h> # include <stdlib.h> # include <math.h> using namespace std; typedef long long int ll; int main(){ int i, j, k; double a, b, c, d; double x=-100.00; double ans[4]; int cnt=0; scanf("%lf%lf%lf%lf", &a, &b, &c, &d); while(1){ if(fabs(a*x*x*x+b*x*x+c*x+d)<0.000001){ ans[cnt++]=x; } if(cnt==3){ break; } x=x+0.0001; if(x>100){ break; } } for(i=0; i<cnt; i++){ if(i!=cnt-1){ printf("%.2lf ", ans[i]); } else{ printf("%.2lf", ans[i]); } } return 0; }