题意:给出圆锥的表面积s,求最大体积时的体积v,半径r,高h
s=sqrt(h*h+r*r)*pi*r+pi*r*r => r*r=s*s/(pi*pi*h*h+2*pi*s)
又因为 V=pi*r*r*h/3 将上式带入,得
V=s*s*h/(3*pi*h*h+6*s) 分子分母同除s*s*h,得
V=(1/3)*1/((pi*h*h+2*s)/s*s*h) 化简,得
V=(1/3)*( (pi/(s*s))*h+(2/s)*(1/h) ) 耐克函数,有最小值,分母最小
时,体积最大,当且仅当h=sqrt(2*s/pi) ,体积最大
于是,说好的二分题就变成了数学题
话说有人是求的导啊。。。不会求导的渣渣表示膜拜
那么代码就很简单的啦(话说之前是先求的v,然后就被卡精度了,无语)
code:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
const double pi=3.141592653589793238462643383279;
using namespace std;
int main()
{
double s,h,v,r;
while(scanf("%lf",&s)!=EOF)
{
h=sqrt(2*s/pi);
r=s/sqrt(pi*pi*h*h+2*pi*s);
v=pi*r*r*h/3;
printf("%.2lf\n%.2lf\n%.2lf\n",v,h,r);
}
}