北大OpenJudge 4140:方程求解
阿新 • • 發佈:2018-12-16
4140:方程求解
總時間限制:
1000ms
記憶體限制:
65536kB
描述
求下面方程的根:f(x) = x3- 5x2+ 10x - 80 = 0。
輸入
-
輸出
精確到小數點後9位。
樣例輸入
-
樣例輸出
-
解析:屬於二分思想的簡單應用,首先我們設定初始的左右端點為0,100,root就取它們兩個的二分點,然後帶入f函式進行計算,如果說這個值是大於零的,我們就縮小右端點;反之,我們縮小左端點,最後求出方程的解。
原始碼:
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; double EPS = 1e-9; double f(double x){ return x*x*x-5*x*x+10*x-80; } int main(){ double root,x1=0,x2=100,y; root=x1+(x2-x1)/2; int triedTimes =1; y=f(root); while(fabs(y)>EPS){ if(y>0) x2=root; else x1=root; root=x1+(x2-x1)/2; y=f(root); triedTimes++; } printf("%.9f\n",root); return 0; }