题目大意:
有一个如上所示的水杯,下底半径为r,上边的半径为R,高为H,现在告诉你水杯内水的体积V,要求你求出水的高度,h;
解题思路:
题目要求精度的是小数点后6位,所以其实也就是让我们二分了。。。。,还有一点就是你的高中或者初中学的数学还没忘,什么等比三角形之类的,圆台面积怎么求之类的,忘了的话就拿张纸比划比划应该能回忆起来的。。。。
代码。。。。
#include<stdio.h>
#include<math.h>
const double PI = acos(-1.0);
double r,R,H,V;
double cal(double h)
{
double r2=(h/H)*(R-r)+r;
return PI/3*(r*r+r*r2+r2*r2)*h;
}
int main()
{
int t;
scanf("%d",&t);
double left,right,mid;
while(t--)
{
scanf("%lf%lf%lf%lf",&r,&R,&H,&V);
left=0;right=H;
while(right-left>=1e-9)
{
mid=(left+right)/2;
if(cal(mid)<=V)
left=mid;
else
right=mid;
}
printf("%lf\n",mid);
}
}