演算法訓練 一元三次方程求解 二分

2021-07-31 05:50:08 字數 1088 閱讀 5307

演算法訓練 一元三次方程求解  

時間限制: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。要求三個...