题目 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3366
三分法
#include<iostream>
#include<cmath>
#include<stdio.h>
using namespace std;
double H,h,D;
double cal(double x)
{
return (h-x)*D/(H-x)+x;
}
int main()
{
double left,right,m,mm;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf",&H,&h,&D);
left=0;
right=h;
while(left+1e-8<right)
{
m=(left+right)/2;
mm=(m+right)/2;
if(cal(m)>cal(mm))
{
right=mm;
}
else
{
left=m;
}
}
printf("%.3lf\n",cal(left));
}
return 0;
}