(坚持每天都写算法)算法复习与学习part1基础算法1-5

发布时间 2024-01-10 01:00:35作者: 程序计算机人

  今天是写题,数的的三次方根。

  

   使用二分法,浮点数不能位运算直接/2即可。

  

//这道题很难想到二分,二分查找是查找,就是找哪个地方有目标数
//一般是用在区间上的,
//总结:二分要求是有查找条件且是查找,符合这两个条件就可以考虑
//不过这里可以把从0到n的浮点数当成一个区间,看数值范围的话,n的话是10000^1/3<22
//查找条件是mid * mid * mid ,而且用二分的一个原因是,因为l和r总会相等,所以可以锁
//数值吧(近似的数值)

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>

using namespace std;

const int N = 10010;
double x;

double fdbsearch(double l , double r ,double eps){
    while(r - l > eps){
        double mid = (l + r) / 2; // 
        if(mid * mid * mid >= x) r = mid;
        else l = mid;//有加必有减
    }
    return l;
}

int main(){
    cin >> x;
    printf(("%lf") , fdbsearch(-22,22,1e-8));
    return 0;
}

  补充:eps的由来是因为题目要求6位小数,也就是精度问题,一般比题目给的还要多出2位小数。

  写的时候又发现我之前的代码想法有问题,也不算有问题,但还是 不显示了吧。