题目链接[http://poj.org/problem?id=3737]
题意:给出一个圆锥的表面积,求最大的体积,并输出最大体积的时候的圆锥的高度和底面积。
方法一:
根据定理:圆锥的表面积一定的时候,当圆锥的斜边长度是底边半径三倍的时候,圆锥的体积最大。
#include<cmath>
#include<cstdio>
const double PI = acos(-1.0);
int main ()
{
double s,h,r,v;
while(~scanf("%lf",&s))
{
r=sqrt(s/PI)/;
h=sqrt(*r*r);
v=PI*r*r*h/;
printf("%.2f\n%.2f\n%.2f\n",v,h,r);
}
return ;
}
方法二:
/
化简体积表达式可知,v和r的关系是一个抛物线函数,求最大值,则对r三分即可。 */
#include<cmath>
#include<cstdio>
const double PI = acos(-1.0);
double s,h,r,v;
double area(double R)
{
double L=s/(PI*R)-R;
double H=sqrt(L*L-R*R);
return PI*R*R*H/3.0;
}
int main ()
{
while(~scanf("%lf",&s))
{
double ll=,rr=sqrt(s/(*PI)),midl,midr;
while(rr-ll>1e-)
{
midl=(ll+rr)/2.0;
midr=(midl+rr)/2.0;
if(area(midl)>area(midr))
rr=midr;
else
ll=midl;
}
r=(rr+ll)/2.0;
double L=s/(PI*r)-r;
h=sqrt(L*L-r*r);
v=area(r);
printf("%.2f\n%.2f\n%.2f\n",v,h,r);
}
return ;
}