UmBasketella

题目大意 给出锥形的表面积 求体积的最大值时 的体积 底面积 和高

很明显的一个单峰函数 三分法

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
const double eps=10e-6;
const double pi=acos(-1.0);
using namespace std;
double s;
double cal(double r)
{
    double R = s/(pi*r)-r;
    double h = sqrt(R*R-r*r);
    return h*pi*r*r/3;
}
int main()
{
    double left,right,mid1,v,v1,v2,mid2,r,h;
    while(~scanf("%lf",&s))
    {
        left=0,right=s;
        while(left+eps<right)
        {
            mid1=(left+right)/2;
            mid2=(mid1+right)/2;
            v1=cal(mid1);
            v2=cal(mid2);
            if(v1<v2)
            left=mid1;
            else
            right=mid2;
        }
        r=left;
        double R = s/(pi*r)-r;
        h=sqrt(R*R-r*r);
        v= h*pi*r*r/3;
        printf("%.2f\n%.2f\n%.2f\n",v,h,r);
    }
    return 0;
}
posted @ 2022-04-18 14:58  wzx_believer  阅读(21)  评论(0)    收藏  举报