本题有优化版本和未优化版本
现在有两个矩形,请算出它们公共面积的大小。
多组测试数据。
每组输入形如:
x1 y1 x2 y2
x3 y3 x4 y4
(x1,y1)为第一个矩形的左上角的坐标,(x2,y2)位第一个矩形右下角的坐标。
(x3,y3)为第二个矩形的左上角的坐标,(x4,y4)位第二个矩形右下角的坐标。
所有数据的绝对值小于等于100,且均是整数。
请输出对应的答案。
1 4 2 1
0 3 3 2
0 2 1 1
3 4 4 3
0 2 3 1
2 3 4 0
1
0
1
#include
using namespace std;
int main()
{
int x1,y1,x2,y2,x3,y3,x4,y4;
while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4)
{
int tall=0,lenth=0,s=0;
if(x1>=x3 && x4>=x1 && x4<=x2)
lenth=x4-x1;
else if(x1>=x3 && x4>=x2)
lenth=x2-x1;
else if(x1<=x3 && x4<=x2)
lenth=x4-x3;
else if(x3<=x2 && x2<=x4 && x3>=x1)
lenth=x2-x3;
if(y3>=y1 && y1>=y4 && y4>=y2)
tall=y1-y4;
else if(y3>=y1 && y4<=y2)
tall=y1-y2;
else if(y1>=y3 && y4>=y2)
tall=y3-y4;
else if(y3>=y2 && y2>=y4 && y3<=y1)
tall=y3-y2;
s=lenth * tall;
if(y2>y3 || y4>y1 || x1>x4 || x3>x2)
s=0;
printf("%d\n",s);
}
return 0;
}
自闭之余 看了一个gg的代码
上面的x和y实际上是需要实现一样的结果 所以进行优化
#include
using namespace std;
int calc(int x1, int x2, int x3, int x4)
{
if (x1 >= x3 && x2 <= x4)
return x2 - x1;
if (x2 >= x4 && x1 <= x3)
return x4 - x3;
if (x3 >= x1 && x2 <= x4 && x3 <= x2)
return x2 - x3;
if (x1 >= x3 && x4 <= x2 && x1 <= x4)
return x4 - x1;
return 0;
}
int main()
{
int x1, y1, x2, y2,x3, y3, x4, y4;
while (cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4)
cout<<calc(x1, x2, x3, x4) * calc(-y1, -y2, -y3, -y4) << endl;
}