http://acm.hdu.edu.cn/showproblem.php?pid=2289
题目大意:这道题就是给你一个圆台,里面装了一些水,现在告诉你圆台上下底半径,高度,水的体积,问你水的高度是多少。
解题思路:数学题,用到圆台求体积公式,照套就是,二分法逼近求值。
double GetVolume(double r,double R,double h,double H)
{
double u = h/H*(R-r) + r;/*中部小圆台上底半径,根据比例可以求*/
return PI/3*(r*r+r*u+u*u)*h;/*圆台面积公式*/
}
double BiSearch(double r,double R,double H,double v)
{
double left,right,tem,mid;
left = 0,right = 100;
while ((right-left)>eps)
{
mid = (left+right)/2;
tem = GetVolume(r,R,mid,H);
if (fabs(tem-v)<=eps)
return mid;
else if(tem<v)
left=mid+eps;
else
right = mid-eps;
}
return (right+left)/2;
}
int main()
{
int test;
double r,R,H,v;
//freopen("e://1.txt","r",stdin);
scanf("%d",&test);
while (test--)
{
scanf("%lf%lf%lf%lf",&r,&R,&H,&v);
printf("%.6lf/n",BiSearch(r,R,H,v));
}
return 0;
}