解方程 二分法 HDU

2021-10-18 04:56:52 字數 1571 閱讀 4343

problem description

給定方程 8x4+ 7x3+ 2x2 + 3x + 6 == y,請計算x在[0,100]範圍內的解。

input

輸入資料首先是乙個正整數t(1<=t<=100),表示有t組測試資料。

接下來t行,每行包含乙個實數y ( fabs(y) <= 1e10 )。

output

請計算並輸出方程在範圍[0,100]內的解,結果精確到小數點後4位。

如果無解,則請輸出「no solution!」

sample input

2100

-4sample output

1.6152

no solution!

首先這個題,我們先想用什麼方法,我們可以使用列舉,而列舉效率過低,我們發現這個函式在[0,100]之間是單調遞增的,因此數列有序,我們可以使用二分法去查詢最合適的答案,並且把誤差控制在1e-4之內。注意這個no solution!情況的判別,我在這居然卡了好久。因為我以為fn(0)就是0,結果半天才檢查出來。

因為我們要保留小數點到後四位,所以在迴圈中我們要控制精度最好在小數點後6~7位。注意輸入的資料y是個實數,不是整數。

#include

using

namespace std;

doublefn(

double x)

intmain()

printf

("%.4lf\n"

,(left+right)/2

);}else

cout<<

"no solution!\n";}

return0;

}

更新一下~~~~

還有一種判斷方法

判斷

abs(8

*mid*mid*mid*mid+

7*mid*mid*mid+

2*mid*mid+

3*mid+

6-y)

>=

1e-5

時迴圈停止。注意一定要加絕對值。

#include

using

namespace std;

intmain()

low=0;

high=

100;

mid=

(low+high)/2

;while

(abs(8

*mid*mid*mid*mid+

7*mid*mid*mid+

2*mid*mid+

3*mid+

6-y)

>=

1e-5

)elseif(

8*mid*mid*mid*mid+

7*mid*mid*mid+

2*mid*mid+

3*mid+

6else

break

; mid=

(low+high)/2

;}printf

("%.4lf\n"

,mid);}

return0;

}

解方程 C 二分法

題目詳情 給出n個整數和x,請問這n個整數中是否存在三個數a,b,c使得ax2 bx c 0,數字可以重複使用。第一行兩個整數n,x 第二行n個整數a i 表示可以用的數 1 n 1000,1000 a i x 1000 yes表示可以 no表示不可以 2 1 1 2 yes要使用二分法解答此題,我...

二分法求解方程

二分法是一種求解方程近似根的方法。對於乙個函式 f x f x 使用二分法求 f x f x 近似解的時候,我們先設定乙個迭代區間 在這個題目上,我們之後給出了的兩個初值決定的區間 20,20 20,20 區間兩端自變數 xx 的值對應的 f x f x 值是異號的,之後我們會計算出兩端 xx的中點...

提高專案18 二分法解方程

任務和 二分法是在電腦科學中很重要的一種方法,用於查詢產生二分查詢演算法,還可以用在很多場合。可以用二分法解方程。對於區間 a,b 上連續不斷且f a f b 0的函式y f x 通過不斷地把函式f x 的零點所在的區間一分為二,使區間的兩個端點逐步逼近零點,進而得到零點近似值的方法叫二分法。假設要...