二分查找2(c++)

概念

二分查找是分治算法的一种

题目练习

(续上一篇,如需了解上一篇题目,请移步主页观看)

查找最近的元素

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;

int n,m;
ll a[100010];

int main()
{
	
	cin>>n;
	for(int i = 1;i<=n;i++)
	{
		cin>>a[i];
	}
	
	cin>>m;
	while(m--)
	{
		int x;
		cin>>x;
		int l = 1;
		int r = n;
		int res;
		while(l<=r)
		{
			int mid = (l+r)/2;
			if(a[mid]==x)
			{
				res = a[mid];
				break;
			}
			else if(a[mid]>x) r = mid-1;
			else if(a[mid]<x) l = mid+1;
			int res2 = abs(res-x);
			int mid2 = abs(a[mid]-x);
			if(res2>=mid2)
			{
				res = a[mid];
			}
		}
		cout<<res<<" ";
	}
	
	return 0;
}

二分法求函数零点

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;

int a,b,c,d,e,f;

int main()
{
	a = 1;
	b = -15;
	c = 85;
	d = -225;
	e = 274;
	f = -121;
	double l = 1.5;
	double r = 2.4;
	double res;
	while(r-l>0.0000009)
	{
		double mid = (l+r)/2;
		double midx = 1.0*a*mid*mid*mid*mid*mid+1.0*b*mid*mid*mid*mid+1.0*c*mid*mid*mid+1.0*d*mid*mid+1.0*e*mid+1.0*f;
//		cout<<l<<" "<<mid<<" "<<r<<" "<<midx<<endl;
		if(midx==0) res = mid;
		else if(midx>0) l = mid+0.000001;
		else if(midx<0) r = mid-0.000001;
		res = mid;
	}
	cout<<fixed<<setprecision(6)<<res;
	
	return 0;
}
相关推荐
Brilliantwxx13 分钟前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
空堂与归1 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
动词ing2 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习2 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
一只小小的芙厨2 小时前
基础数论总结
笔记·学习·算法
夜不会漫长4 小时前
C++入门(1)
开发语言·c++·算法
wen_zhufeng4 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习
大熊背5 小时前
树莓派相机自动白平衡详解(四)
算法·树莓派·白平衡·isppipeline
一米阳光86615 小时前
软考(中级)软件设计师核心笔记(9)算法——背包问题
笔记·算法·职场发展·软考·软件设计师·中级职称
晚风醉蝶5 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法