有一个圆台形状的水杯,已知他的上底和下底半径,以及总高度。然后告诉你它里面已经装的水的体积,那么你知道水有多高吗?(杯子是水平放置的)
Input
第一行是一个T表示输入数据的组数
每个测试数据有一行, 包括4个小数: r, R, H, V, 分别表示下底半径, 上底半径, 高度 和水的体积。
1. T ≤ 20.
2. 1 ≤ r, R, H ≤ 100; 0 ≤ V ≤ 1000,000,000.
3. r ≤ R.
每个测试数据有一行, 包括4个小数: r, R, H, V, 分别表示下底半径, 上底半径, 高度 和水的体积。
1. T ≤ 20.
2. 1 ≤ r, R, H ≤ 100; 0 ≤ V ≤ 1000,000,000.
3. r ≤ R.
Output
对于每个测试样例,输出水的高度。保留6位小数
SampleInput
1 100 100 100 3141562
SampleOutput
99.999024
代码及注释如下:
#include <stdio.h> #include <math.h> #define pi acos(-1)///pai的 值 int main() { double a,b,h,r,R,H,V,r1; int t; scanf("%d",&t); while(t--) { scanf("%lf%lf%lf%lf",&r,&R,&H,&V);///下底是r 上底是R 上底拿没有用 用来得出tan用的 a=0,b=100; while (b-a>1e-7) { h=(a+b)/2; r1=(h/H)*(R-r)+r;///只有上底会改变 (R-r)/H=tan if ((1.0/3.0)*pi*h*(r1*r1+r*r1+r*r)>V)///如果体积比给定的大,则缩小高度 b=h b=h; else a=h;///如果体积比给定的小,则扩大高度 a=h } printf("%.6lf\n",b); } }