Poj百练 4140:方程求解 (分类:二分)

这是一道基础二分题。

个人总结

1.找范围很关键,很多时候题中没有明确给出

2.二分法一定是每次范围缩小一倍

关键都写在注释里了

//方程求解
#include <iostream>
#include<cstdio>
#include<cmath>
using namespace std;

double BinarySearch(double left, double right)
{
    double mid;
    double f;
    while(right - left > 1e-11){    //因为是浮点型
        mid = left+(right-left)/2;
        f = mid*mid*mid-5*mid*mid+10*mid-80;
        if(f < 0)
            left = mid;
        else
            right = mid;
    }
    return mid;
}
int main()
{
    //这道题用到了一定的数学知识,高中知识足矣
    /*1.对原式求导得3x^2-10x+10
      2.由求根公式b^2-4ac<0得出该方程无解,即恒大于0
      3.导数恒大于0,得出原函数单调递增
      4.寻找二分查找的数据范围,从0开始依次带入发现,f(5)=-30<0,f(6)=16>0
      5.即答案一定在5和6之间*/
    printf("%.9lf\n",BinarySearch(5.0,6.0));
    return 0;
}

猜你喜欢

转载自blog.csdn.net/a1097304791/article/details/81463328