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 的零點所在的區間一分為二,使區間的兩個端點逐步逼近零點,進而得到零點近似值的方法叫二分法。假設要...