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