【题解】东哥的杯子
【题目描述】
话说在一场牛客练习赛中,东哥力压群雄,挣得第一,牛客为了奖励东哥的发挥,送他一个马克杯。奖励的马克杯是一个标准的
圆台形状,它的上底为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;
}扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。