二分查找(浮点二分)
一、算法简介
浮点数二分相比与整数二分就要简单很多了,但是还是要注意范围的问题。
以下给出一个小例子,求
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double n;
cin >> n;
double l = 0, r = 10000;
while (fabs(l - r) > 1e-8)
{
double mid = (l + r) / 2;
if (mid * mid <= n) l = mid;
else r = mid;
}
printf("%.6lf", l);
return 0;
}
- 虽然没有下标问题,但是要注意初始的范围问题,比如
在 之间,那么右区间 就不能取 ,因为答案一定比 大。 - 一般情况下浮点二分会涉及到精度的问题,解决办法就是比输出结果多两位,就不会出问题,比如上面代码
中的 ,要求输出后六位,所以要高两位即可。
二、题目描述
给定一个浮点数
输入格式
共一行,包含一个浮点数
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留
数据范围
输入样例:
1000.00
输出样例:
10.000000
三、题目来源
四、算法思路
- 设置
,只需要找到 ≤ 的最大值即可。 - 浮点二分相比于整数二分要简单很多。
五、源码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double n;
cin >> n;
double l = -10000, r = 10000;
while (fabs(l - r) > 1e-8)
{
double mid = (l + r) / 2;
if (mid * mid * mid <= n) l = mid;
else r = mid;
}
printf("%.6lf", l);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!