用c/c++距离二分查找法
时间: 2023-07-12 12:42:31 浏览: 107
二分法.zip_C++_二分法_二分法查找vc++
距离二分查找法(又称为二分答案)可以用 C/C++ 实现,具体实现代码如下:
```c++
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const double eps = 1e-7; // 设置精度
int n; // 数组大小
double l, r; // 二分查找区间
double a[100005]; // 存储数据
bool check(double x) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += floor(a[i] / x); // 计算每个元素能够取到的整数个数
}
return sum >= l; // 判断是否满足要求
}
int main() {
cin >> n >> l;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
l = ceil(l); // 对于整数二分,需要向上取整
r = *max_element(a, a + n); // 取出数组中的最大元素,作为二分区间右端点
while (r - l > eps) { // 当区间长度小于精度时,停止二分
double mid = (l + r) / 2;
if (check(mid)) {
l = mid;
} else {
r = mid;
}
}
printf("%.2f\n", floor(r * 100) / 100); // 输出最终结果,保留两位小数
return 0;
}
```
上述代码实现了一个简单的距离二分查找算法,其中 `check` 函数用于判断当前二分答案是否满足要求。在本例中,我们需要计算数组中所有元素能够取到的整数个数之和,如果大于等于给定的 `l`,则说明当前答案可行。
阅读全文