📄 装备盒问题.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 + -