UVA 10215 - The LargestSmallest Box ...

来源:互联网 发布:1024程序员节 编辑:程序博客网 时间:2024/05/23 22:09

题目大意:给出一个纸,在四个角剪去四个不同的正方形,然后折成一个盒子,问盒子的最大/最下体积时减去的正方形x边长多少;

\"UVA

很显然,盒子体积最大值要通过求导,然后解出最大值,最小只有两个,一个是0,即一点也不剪,另一个就是矩形长宽较短的那条边的一半,这样两种情况体积都是0,当然最小,但是由于求极大值极小值过程需要用到除法,所以要加上精度控制,(一开始没加WA了)

 

code:

#include<cstdio>
#include<cmath>
#define eps 1e-7
int main()
{
    double l, w, min, max;
    while(scanf(\"%lf%lf\",&l,&w)!=EOF)
    {
        if(w>l)
        {
            double tmp=w;
            w=l;
            l=tmp;
        }
        min=(l+w-sqrt(l*l+w*w-l*w))/6;
        max=(l+w+sqrt(l*l+w*w-l*w))/6;
        double ans1=(l-2*min)*(w-2*min)*(min);
        double ans2=(l-2*max)*(w-2*max)*(max);
        double ans;
        if(ans1>ans2)
            ans=min;
        else
            ans=max;
       printf(\"%.3lf 0.000 %.3lf\\n\",ans+eps,(w/2.0)+eps);//一定要加精度控制
    }
    return 0;
}