POJ 3737/三分
Posted Pealicx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3737/三分相关的知识,希望对你有一定的参考价值。
题目链接[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)/2; h=sqrt(8*r*r); v=PI*r*r*h/3; printf("%.2f\n%.2f\n%.2f\n",v,h,r); } return 0; }
方法二:
/ 化简体积表达式可知,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=0,rr=sqrt(s/(2*PI)),midl,midr; while(rr-ll>1e-5) { 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 0; }
以上是关于POJ 3737/三分的主要内容,如果未能解决你的问题,请参考以下文章