演算法訓練 一元三次方程求解
時間限制:1.0s 記憶體限制:256.0mb
問題描述
有形如:ax
3+bx
2+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
暴力可以過,但說正解是二分,因為每個根之間絕對值大於1,所以可以通過f[i]*f[i+1]<0列舉得出根所在的區間,在二分得到答案
但每乙個區間裡,是不能保證單調的,根之間的絕對值大於1,並不能保證極值的位置,所以區間內的單調性是不能保證的,應該資料水。。。畢竟暴力能過。。。。
要注意double存時,和零的比較
#includeusing namespace std;
double a,b,c,d;
const double eps=1e-4;
const double eps1=1e-10;
double y(double x)
double solve(double l,double r,int flog)
else
}return ans;
}int main()
else if(abs(y(i)-0)<=eps1)
else if(y(i+1)>y(i))
flog=1;
else
flog=0;
ans[j++]=solve(i,i+1,flog);}}
for(j=0;j<3;j++)
printf("%.2lf%c",ans[j]," \n"[j==2]);
return 0;
}
演算法訓練 一元三次方程求解 分情況二分)
問題描述 有形如 ax 3 bx 2 cx d 0 這樣的乙個一元三次方程。給出該方程中各項的係數 a,b,c,d 均為實數 並約定該方程存在三個不同實根 根的範圍在 100至100之間 且根與根之差的絕對值 1。要求三個實根。輸入格式 四個實數 a,b,c,d 輸出格式 由小到大依次在同一行輸出這...
演算法訓練 一元三次方程求解
演算法訓練 一元三次方程求解 時間限制 1.0s 記憶體限制 256.0mb 問題描述 有形如 ax 3 bx 2 cx d 0 這樣的乙個一元三次方程。給出該方程中各項的係數 a,b,c,d 均為實數 並約定該方程存在三個不同實根 根的範圍在 100至100之間 且根與根之差的絕對值 1。要求三個...
演算法訓練 一元三次方程求解
演算法訓練 一元三次方程求解 時間限制 1.0s 記憶體限制 256.0mb 問題描述 有形如 ax 3 bx 2 cx d 0 這樣的乙個一元三次方程。給出該方程中各項的係數 a,b,c,d 均為實數 並約定該方程存在三個不同實根 根的範圍在 100至100之間 且根與根之差的絕對值 1。要求三個...