(坚持每天都写算法)算法复习与学习part1基础算法1-5
1.(坚持每天都写算法)算法基础复习part1基础算法1-2——归并排序2.(坚持每天都写算法)算法基础复习part1基础算法1-1——快排3.(坚持每天都写算法)算法基础复习part1基础算法1-34.(坚持每天都写算法)算法基础复习part1基础算法1-4——二分
5.(坚持每天都写算法)算法复习与学习part1基础算法1-5
6.(坚持每天写算法)算法复习与学习part1基础算法1-6——高精度加法7.(坚持每天写算法)基础算法复习与学习part1基础算法1-7——高精度减法(处理t=1和t>1代码的写法,t为操作次数)8.(坚持每天都写算法)算法复习与学习part1基础算法1.8高精度乘法9.(坚持每天写算法)算法复习和学习part1基础算法part1-9高精度乘法10.(坚持每天写算法)算法学习与复习part1基础算法part1-10——前缀和11.(坚持每天写算法)算法复习与学习part1基础算法part1-11——差分12.(坚持每天写算法)算法复习与学习part1基础算法part1-12——双指针算法13.(坚持每天写算法)算法学习与复习part1基础算法1-13——位运算14.(坚持每天写算法)算法复习和学习part1基础算法part1-14——离散化今天是写题,数的的三次方根。
使用二分法,浮点数不能位运算直接/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位小数。
写的时候又发现我之前的代码想法有问题,也不算有问题,但还是 不显示了吧。
本文作者:程序计算机人
本文链接:https://www.cnblogs.com/clina/p/17955622
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步