题目描述
一个圆锥放入一个长方体水池中,无水溢出,求长方体液面高度的最大、最小值。
解题思路
如果这个题只有一个数据点,此数据点只有一组数据,那这就是一道初中填空题()
先考虑 \(h1\) 的最小值。由“铅筒被完全浸没且没有液体溢出水池外”一句可得,若圆锥放入水池后液面高度恰为圆锥高度,则此时放入圆锥前的液面为 \(h1\) 最小值。易证,就不多说了。
而最大值同理,若放入圆锥后此时液面高度恰为水池的高,则此时放入圆锥前的液面为 \(h1\) 最大值。
对于放入前的水池液面高度,用放入后的液面高度减去圆锥的体积除以水池底面积的值即可。
AC代码
#include <bits/stdc++.h>
using namespace std;
const int N=5e5+1;
double a,b,h1,r,h2;
int n;
const double pai=3.14;
int main()
{
scanf("%d",&n);
while(n--)
{
scanf("%lf %lf %lf %lf %lf",&a,&b,&h1,&r,&h2);
printf("%.2lf %.2lf\n",h2-(((pai*r*r*h2)/3.0)/(a*b)),h1-((((pai*r*r*h2)/3.0)/(a*b))));
}
return 0;
}
注意
- 注意输出要求,“保留两位小数”
- 为了少点麻烦,可以直接把 \(a,b,h1,r,h2\) 五个变量当做 double 输入。