文章目录
- 整数二分的作用、应用条件
- 整数二分板子的来龙去脉
- 整数二分板子
- 浮点数二分的作用、应用条件
- 浮点数二分板子
一、整数二分的作用、应用条件
查找在数组中的目标值的下标
应用条件为有序
二、整数二分板子的来龙去脉
代码演示过程如下:
三、整数二分代码
int find(int q){
int l=0,r=n+1; //开区间
while(l+1<r){ //l+1<r时结束
int mid=l+r>>1;
if(a[mid]<=q) l=mid;
else r=mid;
}
return l;
}
int find(int q){
int l=0,r=n+1; //开区间
while(l+1<r){ //l+1=r时结束
int mid=l+r>>1;
if(a[mid]>=q) r=mid;
else l=mid;
}
return r;
}
四、 浮点数二分的作用、应用条件
计算方程/某个值y...的根/几次方根...
应用条件为[l,r]是有序、连续、单调
五、浮点数二分板子
double find(double y){
double l=-100, r=100;
while(r-l>1e-5){
double mid=(l+r)/2;
if(mid*mid*mid<=y) l=mid;
else r=mid;
}
return l;
}
int main(){
double y; scanf("%lf",&y);
printf("%.31f\n",find(y));
return 0;
}
double fun(double x){
return a*x*x*x+b*x*x+c*x+d;
}
double find(double l,double r){
while(r-l>0.0001){
double mid=(l+r)/2;
if(fun(mid)*fun(r)<0) l=mid; //最大化
else r=mid;
}
return l;
}
int main(){
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
for(int i=-100;i<100;i++){
double y1=fun(i), y2=fun(i+1);
if(!y1) printf("%.2lf ", 1.0*i);
if(y1*y2<0)printf("%.2lf ",find(i,i+1));
}
return 0;
}