二分查找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;
}
相关推荐
取地址符9 分钟前
C++学习笔记(基于learn-cxx)(1)
c++·经验分享·笔记·学习
tmlx3I08124 分钟前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-33 分钟前
基础-滑动窗口-(定长 | 不定长)
算法
思麟呀1 小时前
C++17(三)if constexpr+折叠表达式
开发语言·c++
醉城夜风~1 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
ysa0510301 小时前
【板子】ST表
c++·笔记·算法·板子
CHHH_HHH2 小时前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
hurrycry_小亦2 小时前
洛谷题目:P1215 [USACO1.4] 母亲的牛奶 Mother‘s Milk 题解(本题简)
算法
十五年专注C++开发2 小时前
fatal error C1189: #error: WinSock.h has already been included 的解决方案
c++·socket·boost
KJ_BioMed3 小时前
从PDB到高亲和力分子:De novo生成式计算化学Pipeline剖析
算法·生物医药·生物科研·科研干货·化合物设计