一行一个整数,表示表面积S。(1 <= S <= 10^9)
一行一个实数,表示体积。
8
1.504506
一道高中的计算几何,运用高中数学不等式可以直接计算出一个关于s的方程,求解即可。
求解过程如下:设表面积为s,体积为v,底面圆半径为r,圆锥的母线为L。pi 为 π。
可以知道s = pi * r * r(底面积) + pi * r * L(扇形面积); -->可以求出L关于r的方程 :L = s / (pi * r) - r;
然后v = pi * r * r * sqrt(L * L - r * r)/ 3;然后把上述L带入可以得到
v = r * sqrt( s * s - 2 * pi * r * r * s) / 3;
然后开始化简最后得到的那个v方程,用不等式 (x + y) / 2 >= sqrt( x * y); 上述v方程把r带入的话得到下方程
v = sqrt(r * r *(s * s - 2 * pi * r * r * s));
现在看那个根号里面的式子,最好写下来,这样看着真丑~~~~~ 不正好是x * y的形式么把括号里面的东西看成y的话,
然后外面有个r * r 如果配方成 2 * pi * r * r * s 那么(x + y) / 2不就正好可以消去s也是最大值了 配一个sqrt(2 * pi * s);然后化简
化简得: v = s * sqrt(pi * s *2 )/ (12 * pi) (就这样啊,坑啊!~ !~!~!)
代码就两句话了:
#include<iostream>
#include<cstdio>
#include<map>
#include<math.h>
#include<cstring>
#include<algorithm>
using namespace std;
#define pi 3.1415926
int main()
{
double s;
while(scanf("%lf",&s) != EOF)
{
printf("%lf", s * sqrt(s * pi * 2) / (pi * 12));
}
return 0;
}