三次方根函数具有单调性>浮点数的二分:二分模板可以参看上一篇:二分(数的范围)
题目:
思路:
- 确定边界-10000~10000(右边界不能小于1)
- 性质定为mid^3>=n
- 结果保留6位小数,保证(r-l)>10^-8次方(经验:比小数点多二比较保险)
代码:
#include<iostream>
using namespace std;
int main(){
double n;
cin>>n;
double l=-10000,r=10000;
while(r-l>1e-8){
double mid=(l+r)/2; //不能写(l+r)>>1
if(mid*mid*mid>=n)r=mid; //答案在左边
else l=mid; //答案在右边,这里要格外注意,浮点数,所以不用加1
}
printf("%.6lf",l); //或直接"%lf"
return 0;
}
有关算法竞赛的题目会继续更新,欢迎评论交流!