蓝桥杯算法--二分查找算法最好的模板

本文介绍了使用C++实现的二分查找算法模板,以及如何计算数的平方根和解决一元三次方程的示例,通过B站视频详细讲解了在洛谷竞赛中的应用。
摘要由CSDN通过智能技术生成

蓝桥杯算法--二分查找算法最好的模板

B站视频链接:A05 二分查找算法 最好的板子_哔哩哔哩_bilibili

1、题目链接(模板):
【深基13.例1】查找 - 洛谷

#include <bits/stdc++.h>//万能头文件
using namespace std;

const int N=1000010;
int n,m,q,a[N];

int find(int q){
	int l=0,r=n+1;//定义左右端点为开区间 
	while(l+1<r){
		int mid=l+r>>1;
		if(a[mid]>=q)r=mid;
		else l=mid;
	}
	return a[r]==q ? r :-1;
}

int main(){
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	
	while(m--){
		scanf("%d",&q);
		printf("%d ",find(q));
	}
	
	return 0;
}

2、求数的平方根:

#include <bits/stdc++.h>

using namespace std;

int main()
{
    double x;
    cin >> x;
    double l = -10000, r = 10000;
    while (r - l > 1e-8)  
    {
        double mid = (l + r) / 2;
        if (mid * mid >= x) r = mid; 
        else l = mid; 
    }

    printf("%lf\n", l);//double默认6位

    return 0;
}

3、题目链接:[NOIP2001 提高组] 一元三次方程求解 - 洛谷

#include <bits/stdc++.h>
using namespace std;

double a,b,c,d;

double f(double x){
	return a*x*x*x+b*x*x+c*x+d;
}

double find(double l,double r){
	while(r-l>1e-4){//四位比结果多两位(结果要求保留两位) 
		double mid=(l+r)/2;//浮点数不能用>>1 
		if(f(mid)*f(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=f(i),y2=f(i+1);
		if(!y1)printf("%.2lf ",1.0*i);
		if(y1*y2<0)printf("%.2lf ",find(i,i+1));
	}
	
	
	return 0;
} 

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值