题目大意:一个长度为L的杆,在温度n下,会扩展到一个新长度L'=(1+n*C)*L,c为形变系数,题目要求计算如图扩展后,拉长杆的中心与圆杆中心的距离,输入为-1,-1,-1则退出程序。
题目链接:http://poj.org/problem?id=1905
方法:二分法
思路:这个就很简单啦,二分的对象显然是中心的距离,然后通过中心距离和圆杆长来计算扩展后的长度(不要告诉我你不会算--),在比较实际扩展的长度,这样就行了,注意精确度。
算法实现:
#include<stdio.h>
#include<math.h>
int main()
{
double l,n,c,L,r,len;
double low,high,mid;
while(scanf("%lf%lf%lf",&l,&n,&c)!=EOF)
{
if(l<0&&n<0&&c<0)
break;
else
{
low=0;
L=(1+n*c)*l;
high=l/2;
while(high-low>=1e-5)
{
mid=(low+high)/2.0;//由mid和l求出此时的理论长度len,然后进行比较。
r=l*l/(8*mid)+mid/2;
len=2*r*asin(l/(2*r));
if(len>=L)
high=mid;
else
low=mid;
}
printf("%.3lf\n",mid);
}
}
return 0;
}