分析:
S=πr2+πrl
S
=
π
r
2
+
π
r
l
l=Sπr−r
l
=
S
π
r
−
r
h=sqrt(l2−r2)
h
=
s
q
r
t
(
l
2
−
r
2
)
V=πr2h3
V
=
π
r
2
h
3
三分
r
r
<script type="math/tex" id="MathJax-Element-175">r</script>,得到最大值
tip
拍不出错,但是poj上就是过不去
但请高人指点
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const double eps=1e-6;
const double Pi=acos(-1.0);
double S;
double len(double x)
{
return (S/Pi/x)-x;
}
double cal(double r)
{
double l=len(r);
double h=sqrt(l*l-r*r);
return Pi*r*r*h/3.0;
}
int main()
{
while (scanf("%lf",&S)!=EOF)
{
double l=0,r=S/Pi;
double m1,m2,h1,h2;
while (r-l>eps) //三分R
{
m1=l+(r-l)/3.0;
m2=r-(r-l)/3.0;
if (cal(m2)>cal(m1))
l=m1;
else r=m2;
}
double R=(m1+m2)/2.0;
double L=len(R);
printf("%0.2lf\n%0.2lf\n%0.2lf\n",cal(R),sqrt(L*L-R*R),R);
}
return 0;
}