二分查找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;
}
相关推荐
一条大祥脚19 小时前
Manacher/马拉车算法
算法
phoenix@Capricornus19 小时前
初等数学中点到直线的距离
人工智能·算法·机器学习
田里的水稻19 小时前
FA_规划和控制(PC)-快速探索随机树(RRT)
人工智能·算法·数学建模·机器人·自动驾驶
jaysee-sjc19 小时前
十三、Java入门进阶:异常、泛型、集合与 Stream 流
java·开发语言·算法
元亓亓亓20 小时前
LeetCode热题100--41. 缺失的第一个正数--困难
数据结构·算法·leetcode
码云数智-大飞20 小时前
.NET 10 & C# 14 新特性详解:扩展成员 (Extension Members) 全面指南
java·数据库·算法
weixin_4772716920 小时前
狗象:与强大的一方建立联系,并控制调用对方的力量。)马王堆帛书《周易》原文及甲骨文还原周朝生活现象《函谷门
算法·图搜索算法
小妖66620 小时前
js 实现归并排序算法
算法·排序算法
枫叶丹420 小时前
【Qt开发】Qt界面优化(五)-> Qt样式表(QSS) 子控件选择器
c语言·开发语言·数据库·c++·qt
fu的博客20 小时前
【数据结构7】链式栈实现
数据结构·算法