<题目链接>
题目大意:
一个圆台型的杯子,它的上底半径和下底半径已经给出,并且给出它的高度,问你,体积为V的水倒入这个杯子中,高度为多少。
解题分析:
就是简单的二分答案,二分枚举杯中水的高度,然后根据几何计算出该高度下,水的上半径,然后计算出该高度下水的体积,在与实际水的体积进行比较,从而确定最终的答案。
1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 5 const double PI=acos(-1.0); 6 const double eps=1e-9; 7 double R,r,H,v; 8 9 double vol(double h){ 10 double rtop=(H*r+h*(R-r))*1.0/H*1.0; //利用几何关系计算出高度为h处圆杯的半径 11 return PI*h*(rtop*rtop+r*r+rtop*r)/3; //利用公式计算出该高度下水的体积 12 } 13 14 int main(){ 15 int T;scanf("%d",&T); 16 while(T--){ 17 scanf("%lf%lf%lf%lf",&r,&R,&H,&v); 18 double l=0,r=H; 19 while(r-l>eps){ 20 double mid=(l+r)/2; //二分答案,枚举水杯中水的高度 21 if(vol(mid)>v)r=mid; 22 else l=mid; 23 } 24 printf("%.6lf ",l); 25 } 26 return 0; 27 }
2018-11-02