⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 装备盒问题.txt

📁 装备盒问题。 大意是给出一个矩形地板
💻 TXT
字号:
装备盒问题。
大意是给出一个矩形地板,你有一个底面为矩形的盒子必须放在上面而不超过地板边界。
现在给出地板的长(X)和宽(Y),以及盒子的长(a)和宽(b),问是否可能达到要求(即放上去不超过边界)? 
#include<iostream.h>
#include<math.h>

class Floor
{
protected:
    float a,b,x,y;
public:
    Floor();
    ~Floor();
    Floor(Floor &p);
    void Insert();
    int DealWith();
    int jurdge(float aa,float bb,float xx,float yy);
};

int Floor::jurdge(float a,float b,float x,float y)
{
    float k,r1,r2,p1,p2;
    k=float(4*(b*b*x*x*x*x/(y*y*y*y)-x*x*(b*b/(y*y)-1)*(x*x/(y*y)+1)));
    if(k<0) return 0;
    else 
    {
        k=float(sqrt(k));
        p1=float((b*x*x/(y*y))/(x*x/(y*y)+1));
        p2=float(k/(2*(x*x/(y*y)+1)));
        r1=p1+p2;
        if(r1>0&&r1<b) 
        {
            if(sqrt(x*x-r1*r1)>0&&sqrt(x*x-r1*r1)<a)
            {
                if(sqrt(y*y-(b-r1)*(b-r1))>0&&sqrt(y*y-(b-r1)*(b-r1))<a)
                    return 1;
            }
        }
        r2=p1-p2;
        if(r2>0&&r2<b)
        {
            if(sqrt(x*x-r2*r2)>0&&sqrt(x*x-r2*r2)<a)
            {
                if(sqrt(y*y-(b-r2)*(b-r2))>0&&sqrt(y*y-(b-r2)*(b-r2))<a)
                    return 1;
            }
        }
        
    }
    k=float(4*(b*b*y*y*y*y/(x*x*x*x)-y*y*(b*b/(x*x)-1)*(y*y/(x*x)+1)));
    if(k<0) return 0;
    else 
    {
        k=float(sqrt(k));
        p1=float((b*y*y/(x*x))/(y*y/(x*x)+1));
        p2=float(k/(2*(y*y/(x*x)+1)));
        r1=p1+p2;
        if(r1>0&&r1<b) 
        {
            if(sqrt(y*y-r1*r1)>0&&sqrt(y*y-r1*r1)<a)
            {
                if(sqrt(x*x-(b-r1)*(b-r1))>0&&sqrt(x*x-(b-r1)*(b-r1))<a)
                    return 1;
            }
        }
        r2=p1-p2;
        if(r2>0&&r2<b)
        {
            if(sqrt(y*y-r2*r2)>0&&sqrt(y*y-r2*r2)<a)
            {
                if(sqrt(x*x-(b-r2)*(b-r2))>0&&sqrt(x*x-(b-r2)*(b-r2))<a)
                    return 1;
            }
        }
        
    }
     return 0;
}

Floor::Floor()
{
    a=0;
    b=0;
    x=0;
    y=0;
}

Floor::~Floor()
{}

Floor::Floor(Floor &p)
{
    x=p.x;
    y=p.y;
    a=p.a;
    b=p.b;
}

void Floor::Insert()
{
    cout<<" 地板的长:\n a= ";
    cin>>a;
    cout<<" 地板的宽:\n b= ";
    cin>>b;
    cout<<" 盒子的长:\n x= ";
    cin>>x;
    cout<<" 盒子的宽:\n y= ";
    cin>>y;
    if(a<=0||b<=0||x<=0||y<=0)
        throw 1;
    else
    {
        float temp;
        if(a<b) 
        {
            temp=a;
            a=b;
            b=temp;
        }
        if(x<y)
        {
            temp=x;
            x=y;
            y=temp;
        }
    }
}

int Floor::DealWith()
{
    int re;
    if(a>=x&&b>=y)
        re=1;
    else if(a<x&&b<y)
        re=0;
    else if(a>x&&b<y)
    {
        return jurdge(a,b,x,y);
    }
    else if(a<x&&b>y)
    {
        return jurdge(a,b,x,y);
    }
    else re=0;
    return re;
}

void main()
{
    Floor A;
    try
    {
        A.Insert();
        if(A.DealWith()) cout<<"Successful!"<<endl;
        else cout<<"Can't position the box."<<endl;
    }
    catch(int)
    {
        cout<<"请输入合法数值!"<<endl;
    }
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -