1、简单描述
一个长为l的铁条,固定两端加热,温度和膨胀系数已知,求铁条膨胀后高度。
2、思路
#include <iostream>
#include <cstdio>
#include <cmath>
#include<iomanip>
using namespace std;
int main()
{
double l,c,n,ll,t,lef,rig,mid,y,r,h;
while(cin >> l >> n >> c)
{
if(l<0&&n<0&&c<0)
break;
ll=(1+c*n)*l;
lef=0.0;
rig=l*0.5;
while(rig-lef > 1e-5)
{
mid=(lef+rig)/2;
double R = (4*mid*mid + l*l) / (8 * mid);
if(2*R*asin(l/(2*R)) < ll)
lef=mid;
else
rig=mid;
}
cout<<fixed<<setprecision(3)<<mid<<endl;
}
return 0;
}
二分查找,同样在精度处理上有问题,double型数据不能直接判断相等,二者相减小于一个很小的数。