当前位置:首页 > 题解目录 > 正文内容

【题解】东哥的杯子

亿万年的星光3年前 (2022-03-26)题解目录7194

【题目描述】

话说在一场牛客练习赛中,东哥力压群雄,挣得第一,牛客为了奖励东哥的发挥,送他一个马克杯。奖励的马克杯是一个标准的

圆台形状,它的上底为R1,下底为R2,高为H, 东哥向杯子里倒V毫升的水,你知道倒完水后,杯子里的水位有多高吗?

【输入描述】

多组数据

每组数据只有一行,为R1(1<=R1<=10,000),R2(1<=R2<=100,000), H(1<=H<=100,000),V(1<=V<=1000,000,000)。

【输出描述】

输出倒完水后的杯子的水位高,结果保留三位小数

【样例输入】

10 100 10 1000
1 1 1 10

【样例输出】

1.250
1.000

【公式】

圆台体积公式


r为上底半径、R为下底半径、h为高。


【题目分析】



【参考答案】

#include<bits/stdc++.h>
using namespace std;
const double EPS=1e-9;
const double pi=acos(-1.0);//得到π的值
double r1,r2,h,v;
bool check (double x)
{
    double R=1.0*r1+(r2-r1)*x/h;
    return 1.0/3*pi*x*(r1*r1+R*R+r1*R)<v;
}
int main()
{
    while(cin>>r1>>r2>>h>>v)
    {
        double V=1.0/3*pi*h*(r1*r1+r2*r2+r1*r2);
        if(v>=V)
        {
            printf("%.3lf\n",h);
            continue;
        }
        double l=0,r=100*1.0,mid;
        while(r-l>EPS)
        {
            mid=(l+r)/2.0;
            if(check(mid))
                l=mid+EPS;
            else r=mid-EPS;
        }
        printf("%.3lf\n",(l+r)/2.0);
    }
    return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

标签: 二分
分享给朋友:

相关文章

【题解】密码截获

【题目描述】Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码 进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。...

【题解】进制转换(2019青岛市程序设计竞赛)

【问题描述】输入十进制正整数n和k,输出n的k进制数。我们熟悉的十进制所需的10个基数(基本的数字符号)是0,1,2,3,4,5,6,7,8,9。当10<k<=16时,k进制的k个基数从小...

【题解】区间数位个数

2.区间数位个数(digit.cpp)【描述】给定整数n和整数k,求出1~n中所有数的每一位数字中,出现数字k的次数。【输入】第一行是两个个整数n和k【输出】一个整数表示答案。【样例输入输出】ligh...

【题解】求逆序对个数

【题目描述】有一实数序列A[1]、A[2] 、A[3] 、……A[n-1] 、A[n] (n<10000),若i<j,并且A[i]>A[j],则称A[i]与A[j]构成了一个逆序对,...

【题解】黑白棋子移动

【题目描述】有2n个棋子(n≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,如下图为n=5的情形:○○○○○●●●●●移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可...

【题解】日期排序

【题目描述】有一些日期,日期格式为“MM/DD/YYYY”。编程将其按日期大小排列。【输入描述】无【输出描述】无【样例输入】15/12/1999 10/21/2003 10/22/2003 02...