题目链接:https://cn.vjudge.net/contest/277059#problem/G
题意:给出H,h,D求L.
思路;做辅助线,用相似三角形求X,然后三分。
D/x=(H-y)/h-y L=x+y
得 L=x+(x*H-D*h)/(x-D)
三分求x即可求出答案。(注意x的取值范围)
#include<algorithm>
#include<string.h>
#include<stdio.h>
const double epx=0.001;
int t;
double H,h,D,l,r,mid;
double anser(double x)
{
return x+(x*H-D*h)/(x-D);
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf",&H,&h,&D);
l=0,r=D*h/H;
while(r-l>epx)
{
mid=(l+r)/2.0;
if(anser(mid-epx)<anser(mid+epx)) l=mid+epx;
else r=mid-epx;
}
printf("%.3lf\n",anser(l));
}
}