杯子

有一个圆台形状的水杯,已知他的上底和下底半径,以及总高度。然后告诉你它里面已经装的水的体积,那么你知道水有多高吗?(杯子是水平放置的)
Input
第一行是一个T表示输入数据的组数 
每个测试数据有一行, 包括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);
    }
}

 

posted @ 2017-12-28 19:06  star_fish  阅读(295)  评论(0编辑  收藏  举报