首页 > 代码库 > POJ 3737/三分
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/三分
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。