51nod 1629 B君的圆锥

基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
 收藏
 关注
B君要用一个表面积为S的圆锥将白山云包起来。
 
B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少。
 
注意圆锥的表面积包括底面和侧面。
Input
一行一个整数,表示表面积S。(1 <= S <= 10^9)
Output
一行一个实数,表示体积。
Input示例
8
Output示例
1.504506

圆锥表面积s=π*r*r + π * r*l
体积=π*r*r*h/3

r:底面圆半径
l:母线长

三分半径

#include<cstdio>
#include<cmath>

const double pi=acos(-1.0);

double s;

double solve(double r)
{
    double l=(s-pi*r*r)/(pi*r);
    double h=sqrt(l*l-r*r);
    return pi*r*r*h/3;
}

int main()
{
    scanf("%lf",&s);
    double l=0,r=s,mid1,mid2;
    int T=100;
    while(T--)
    {
        mid1=r/3+l*2/3;
        mid2=l/3+r*2/3;
        if(solve(mid1)<solve(mid2)) l=mid1;
        else r=mid2;
    }
    printf("%.6lf",solve(mid1));
}

 

posted @ 2017-10-23 22:05  TRTTG  阅读(219)  评论(0编辑  收藏  举报