1. 程式人生 > >北大OpenJudge 4140:方程求解

北大OpenJudge 4140:方程求解

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;
}