题目大概:
两个木板之间有个笔直的细杆,当加热时,细杆会变弯,细杆的中心惠偏离原来的位置,求偏移的大小。
思路:
这个题主要运用了数学上的三个公式,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;
}