lanqiao OJ 1389 二分

 二分:最小值最大和最大值最小


浮点二分的范围不同于整数二分是一个有序的数组,而是一个实数的范围。

再退出循环的时候设置一个极小量如(1e6)

这样表示无限趋近

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

int main()
{
	int data[200];
	for(int i=0;i<200;i++)
	{
	 data[i]=4*i+6;
	}
	
	int x;cin>>x;
	int l=-1,r=199;		//最后返回r的值,保证r的范围也就是l+1在0-199之内;需要将l的值设置为-1; 
	while(l+1!=r)	    //结束的条件是r和l相邻
	{
		int mid =(l+r)/2;	//需要在内部更新mid
		if(data[mid]>=x)
		{
			r=mid;
		}else{
			l=mid;
		}
	}			//代码逻辑:最后data[mid]==x;
				//然后循环缩小区间直至退出返回r; 
	
	cout<<r<<'\n';	//右边的r对应>=x;  左边的l对应<=x; 虽然在退出循环的时候值是相同的,但是含义不一样 
	
	return 0 ;
}  

//即使找到了目标元素,循环也可能会继续执行几次迭代,直到搜索范围缩小到只包含一个元素为止。
//  "位运算"  >>1   和/2是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值