矩形的面积:
【问题描述】
在笛卡尔坐标系内(x轴向右为正,y轴向上为正),给出2个矩形的左上角坐标与右下角坐标,请你计算出两个矩形所覆盖区域的面积。
【输入形式】
第一行4个空格隔开的整数,表示第1个矩形的左上角与右下角的坐标x1,y1,x2,y2;
第二行4个空格隔开的整数,表示第2个矩形的左上角与右下角的坐标x3,y3,x4,y4;
坐标xi与yi均大于等于1000000且小于等于-1000000;
数据确保面积小于1000000000。
【输出形式】
一个整数表示面积。
【样例输入1】
0 2 2 0
-1 1 1 -1
1
2
【样例输出1】
7
1
【样例输入2】
0 3 3 0
-1 2 4 1
1
2
【样例输出2】
11
1
【样例输入3】
-100 0 100 -1
0 1 200 0
1
2
【样例输出3】
400
#include <stdio.h>
#include <math.h>
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
int main(){
int x1,x2,y1,y2,x3,y3,x4,y4;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
scanf("%d %d %d %d",&x3,&y3,&x4,&y4);
//无交集
if(x3>x2||x4<x1||y4>y1||y3<y2)printf("两个矩形不重叠");
else{
int s=0,w=2;
int a,b,c,d;
c=min(x2,x4);
d=max(x1,x3);
int l = c-d;
a=min(y1,y3);
b=max(y2,y4);
w = a-b;
//printf("%d %d,w=%d\n",min(y1,y3),max(y2,y4),w);
//printf("l=%d,w=%d,l*w=%d\n",l,w,l*w);
s=abs(x1-x2)*abs(y1-y2)+abs(x3-x4)*abs(y3-y4)-l*w;
printf("%d",s);
}
return 0;
}