因为只做过二分题目,三分没做过,编程之美2013初赛跪了。赛后找个练手,结果发下poj3737,就是数学推导,无语......看来还得再找个练练.......
题意:求一个面积为s的圆锥体的最大体积,以及对应的底面半径和高。
思路:基础几何。注意面积 s = s侧面+s底面。对于PI,以后就取PI=acos(-1.0)。
S=pi*r*l + pi*r*r
l=sqrt(r*r+h*h), 联立得, r*2= s*s/(pi*pi*h*h+2*pi*s)
V=(1/3)*pi*r*r*h,代入r*2,求导,令一阶导数为0,得出结果
h=sqrt(2*s/pi)
r=sqrt(s*s/(pi*pi*h*h+2*pi*s))
v=(1.0/3.0)*(s*s)*h/(pi*h*h+2*s)
我的代码:
#include <iostream>
#include <cmath>
#include <cstdio>
#define PI acos(-1.0)
using namespace std;
int main()
{
double s, h, v, r;
while ( scanf("%lf", &s) != EOF )
{
r = sqrt(s/PI)/2;
h = sqrt(2*s/PI);
v = 1.0/3*PI*r*r*h;
printf( "%.2lf\n%.2lf\n%.2lf\n", v, h, r);
}
}