二分查找
使用场景:二分搜答案
要求
1.数是有范围的
2.是有序的
3.有反馈
模板
void main(){
int l=0,r,x;
//模板一 从左向右查找
while(l<r){
int mid=l+r>>1;
if(q[mid]<x) l=mid+1;
else r=mid;
}
//模板二 从右向左查找
while(l<r){
int mid=l+r+1>>1;
if(q[mid]>x) r=mid-1;
else l=mid;
}
return 0;
}
题解
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
double n,l,r;
cin>>n;
l=-10000;
r=10000;
while(r-l>1e-7){
double mid=(l+r)/2;
if(mid*mid*mid>n) r=mid;
else l=mid;
}
printf("%.6f",l);
return 0;
}
⭐⭐
注意循环条件while(r-l>1e-7)