二分贪心--07

题目大概:

两个木板之间有个笔直的细杆,当加热时,细杆会变弯,细杆的中心惠偏离原来的位置,求偏移的大小。

思路:

这个题主要运用了数学上的三个公式,1。。直角三角形边两边平方和等于斜边。2.。。弧长等于半径乘弧度。3.。。直角三角形中角和边的关系。

第一个推出半径,第二个第三个得出弧长的一半。

因为原来的方程解不出来,就用二分法不断逼近。

感想:

这个题其实精度比较重要,思路很好想,代码也好些,但当提交时还是有错,把输出双精度改成单精度,并且转换了几个double后过了。

我估计原来不过最可能是双精度的问题。

代码:

#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
const double q=1e-5;
double le, c, n;
int main()
{
 double l, ri, mid;
 double r;
 double l2;

 while(scanf("%lf %lf %lf",&le,&n,&c)!=EOF)
 {
  if(le==-1 &&n==-1&&c==-1)break;
  l=0;
  ri=le/2;
  l2=(1.0+n*c)*le;
  while(ri-l>q)
  {
   mid=(double)(l+ri)/2;
   r=(double)(mid*mid+le*le/4)/(mid*2);
   if(r*asin(le/(2*r))<l2/2)
    l=mid;
   else
    ri=mid;
  }
  printf("%.3f\n",mid);
 }
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值