题意:一根木棒恰被夹在两堵墙中间,受热这跟木棒会膨胀,求膨胀后木棒偏离原位置的最远距离。
分析:木棒由于两段被卡住,膨胀后为圆弧的一段(圆的张力最大),就是求弦到弧的距离了。
这题有三个未知量:圆半径,弧的角度,还有最后要求的答案。这三个未知量知道一个就可以求出另外两个,所以此题有三种解法,即对三个未知量分别二分。
另外注意c++和G++对double的输出不同。交错了就wa。。。
//Memory: 152 KB
//Time: 0 MS
#include <stdio.h>
#include <math.h>
#define pi 3.1415926535897
#define ep 1E-8
int main()
{
double r,l,ll,n,c;
while(~scanf("%lf%lf%lf",&l,&n,&c))
{
if(l+1<ep && n+1<ep && c+1<ep)
break;
double high,low,mid,temp;
high=l/2;
low=0;
ll=(1+n*c)*l;
if(l==0 || n==0 || c==0)
printf("0.000\n");
else
{
while(fabs(high-low)>ep) //二分答案
{
mid=(high+low)/2;
r=((l/2)*(l/2)+mid*mid)/(2*mid);
temp=r*2*asin(l/(2*r));
if(fabs(ll-temp)<ep)
break;
else if(ll>temp)
low=mid;
else if(ll<temp)
high=mid;
}
printf("%.3lf\n",mid);
}
}
return 0;
}