0
点赞
收藏
分享

微信扫一扫

二分贪心--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;
}


举报

相关推荐

0 条评论