二分查找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;
}
相关推荐
y1su3 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
residual_fan3 小时前
船用柴油机动态机动工况故障诊断:控制感知仿射网络(CAAN)的技术实现
人工智能·算法·数据挖掘·数据分析
syagain_zsx4 小时前
BRpc 二次封装:Channel 管理、服务管理与回调工厂
c++·学习·程序人生·rpc·谷歌
其实防守也摸鱼4 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
蓝悦无人机4 小时前
《Planning algorithms》读书笔记——第8章 反馈运动规划
算法·读书笔记·反馈运动规划
RaaS1005 小时前
Agent Skills 进了 Linux Foundation:2.8 亿次安装,但装 skill 还没有安全规范
人工智能·算法·架构
CV爱数码5 小时前
CT 重建从零开始(五):ASTRA Toolbox 上手——几何、投影器与算法
图像处理·算法·计算机视觉·ct
TunerT_TQ5 小时前
超立方体Ramsey(openai/math 家族171)H11攻坚日志|D60–D69:Star分组重数、二幂坐标群、奇偶入射语义与Site‑Level候选计数形式化闭环
算法
fpcc5 小时前
计算机原理—如何高效的操作文件
c++·计算机原理
Rabitebla5 小时前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法