这题很有意思,除了一般的程序知识,还用了数学的东西。推导了一些公式什么的。
这次用了两种方法做,层层深入,希望能让大家体会到代码的改良过程
第一步:

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;double binary_searsh(double left, double right, double L,double L1){double mid,L2 = L * L;while (right - left > 1e-6){mid = (left + right) / 2; // regard mid as h double rt = (4 * mid * mid + L2)/ (8 * mid);double rR = 2*rt *asin(L / (2 * rt));if (rR < L1){left = mid;} else {right = mid;}} return mid;
}int main(){double h = 0,L,n,c;while (cin >> L>> n>> c&& c != -1){h = 0;if (L == 0 || n == 0 || c == 0){printf("%.3lf\n",0);} else {double L1 = (1 + n * c) * L;double ans = binary_searsh(0,L/2, L, L1);printf("%.3lf\n",ans);}}
}

改良:

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;double binary_searsh(double left, double right, double L,double L1){double mid,L2 = L * L;while (right - left > 1e-6){mid = (left + right) / 2; // regard mid as h double r_2 = mid + L2 / (4 * mid);double rR = r_2 * asin(L / (r_2));if (rR < L1){left = mid;} else {right = mid;}} return mid;
}int main(){double h = 0,L,n,c;while (cin >> L>> n>> c&& c != -1){h = 0;if (L == 0 || n == 0 || c == 0){printf("%.3lf\n",0);} else {double L1 = (1 + n * c) * L;double ans = binary_searsh(0,L/2, L, L1);printf("%.3lf\n",ans);}}
}

改进部分在二分搜索部分,表达式进行处理之后,进行运算次数减少。

总结:
输出精度问题,还是用printf解决的好。

[二分查找变形]弯曲的木杆(POJ 1905)相关推荐

  1. 剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)

    1. 题目 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2示例 2: 输入: nums = [5,7,7,8, ...

  2. 算法与数据结构之二分查找

    一.两道LeetCode题 首先来两道算法题举例,来初步探讨二分查找 278.First Bad Version 先贴上代码 // Forward declaration of isBadVersio ...

  3. 【数据结构与算法】二分查找

    一.什么是二分查找? 二分查找针对的是一个有序的数据集合,每次通过跟区间中间的元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0. 二.时间复杂度分析? 1.时间复杂度 ...

  4. xtragrid 某个值 查找_二分查找(下):如何快速定位IP对应的省份地址?

    通过IP地址来查找IP归属地的功能,不知道你有没有用过?没用过也没关系,你现在可以打开百度,在搜索框里随便输一个IP地址,就会看到它的归属地. 这个功能并不复杂,它是通过维护一个很大的IP地址库来实现 ...

  5. 腾讯笔试编程题,贪吃的小Q(二分查找)

    问题描述 小Q的父母要出差N天,走之前给小Q留下了M块巧克力.小Q决定每天吃的巧克力数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少块巧克力. 输入描 ...

  6. 二分查找:思路很简单,细节是魔鬼

    文章目录 1. 简介 2. 最简单的二分查找 3. 4种常见的二分查找变形问题 3.1 查找第一个值等于给定值的元素 3.2 查找最后一个值等于给定值的元素 3.3 查找第一个大于等于给定值的元素 3 ...

  7. 【算法】详解二分查找算法(思路很简单,细节是魔鬼)

    我周围的人几乎都认为二分查找很简单,但事实真的如此吗?二分查找真的很简单吗?并不简单.看看 Knuth 大佬(发明 KMP 算法的那位)怎么说的: Although the basic idea of ...

  8. 二分查找法+左右边界搜索

    原文参考:二分查找算法详解 思路 我相信对很多读者朋友来说,编写二分查找的算法代码属于玄学编程,虽然看起来很简单,就是会出错,要么会漏个等号,要么少加个 1. 不要气馁,因为二分查找其实并不简单.看看 ...

  9. 六十七、二分查找算法及其四个变形问题

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 文章目录 二分法查找 二分查找的变形问题 查找第一个等于给定值的元素 ...

最新文章

  1. python小波特征提取_Python 小波包变换,小波包能量特征提取 代码
  2. 中国储能变流器(PCS)产业投资可行性与发展潜力分析报告2022-2028年版
  3. 【算法基础】数据结构导论第三章-栈、队列和数组.pptx
  4. 【STM32】随机数发生器相关函数和类型
  5. java异常处理机制_Java的异常处理机制
  6. Programe_Of_Beauty:2.14 求数组的子数组之和的最大值
  7. Docker收购Orchard,SAP支持OpenStack,ODF等
  8. sprintf函数_C语言源代码展示:常用转换函数实现原理
  9. beego模板语法循环html块,1.69 beego 模板语法指南 - Beego 中文文档
  10. 软考中级,软件设计师考试那些内容,考试大纲什么的?
  11. mx350显卡天梯图_CPU天梯图与显卡天梯图2020年最新版
  12. .NET:Core源码编译
  13. j2ee与java区别_j2ee和java的区别是什么?
  14. Linux配置VNC远程桌面
  15. IT人才供不应求,大数据分析程序员今后的发展道路
  16. 数据分析-美国小孩英文名分析-可视化(含代码)
  17. PC817做IO输出使用方法
  18. 高性能本地缓存Ristretto(三)——淘汰策略
  19. fpga电平约束有什么作用_Xilinx FPGA的约束设计和时序分析总结
  20. WICC2021召开在即 商汤科技将展示AI“新能源”

热门文章

  1. WINCE下如何设置/删除/查询这些环境变量
  2. shell在二级python_在python下运行时在shell脚本之间传递shell变量[duplicate]
  3. c#加粗代码_c#窗体,选中复选框,文字加粗变绿代码
  4. Git 基础 —— 安装 配置 别名 对象
  5. 基于Hadoop的数据分析平台搭建
  6. 1057. 数零壹(20)
  7. 复制虚拟机网卡eth0变eth1
  8. 11G中自动收集统计信息
  9. SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型
  10. python替换文本文件单词_在大型文本文件中替换一组单词