【问题描述】
平面上有两个矩形A和B,其位置是任意的。编程求出其相交部分(如图中阴影部分)的面积。(0≤a,b≤1000)
【输入形式】
从标准输入读取两行以空格分隔的整数,格式如下:
Ax1 Ay1 Ax2 Ay2
Bx1 By1 Bx2 By2
其中(x1,y1)和(x2,y2)为矩形对角线上端点的坐标。各坐标值均为整数,取值在0至1000之间。
【输出形式】
向标准输出打印一个整数,是两矩形相交部分的面积(可能为0)。在输出末尾要有一个回车符。
【输入样例】
0 0 2 2
1 1 3 4
【输出样例】
1
-----------------
个人代码:
#include <stdio.h> int main(){ int ax1,ay1,ax2,ay2,bx1,by1,bx2,by2; int i,j,temp,area=0; scanf("%d %d %d %d",&ax1,&ay1,&ax2,&ay2); scanf("%d %d %d %d",&bx1,&by1,&bx2,&by2); if(ax1>ax2){ temp = ax1; ax1 = ax2; ax2 = temp; } if(ay1>ay2){ temp = ay1; ay1 = ay2; ay2 = temp; } if(bx1>bx2){ temp = bx1; bx1 = bx2; bx2 = temp; } if(by1>by2){ temp = by1; by1 = by2; by2 = temp; } if(ax2>=bx1 && ax1<=bx2 && ay2>=by1 && ay1<=by2) area = (ax2-bx1)*(ay2-by1); printf("%d\n",area); getchar(); return 0; }
标答:
#include <stdio.h> #include <stdlib.h> struct point { int x; int y; }A1,A2,B1,B2; struct rect { struct point p1; struct point p2; }R1,R2; struct point makepoint(int x,int y); struct rect makerect(struct point p1,struct point p2); struct rect guifanrect(struct rect R); #define max(A,B) ((A)>(B)?(A):(B)) #define min(A,B) ((A)>(B)?(B):(A)) main() { int i,num1[4],num2[4],area; for(i=0;i<4;i++) scanf("%d",&num1[i]); for(i=0;i<4;i++) scanf("%d",&num2[i]); R1 = makerect(A1 = makepoint(num1[0],num1[1]), A2 = makepoint(num1[2],num1[3])); R2 = makerect(B1 = makepoint(num2[0],num2[1]), B2 = makepoint(num2[2],num2[3])); R1 = guifanrect(R1); R2 = guifanrect(R2); if( R1.p2.x <= R2.p1.x || R1.p2.y <= R2.p1.y || R1.p1.x >= R2.p2.x || R1.p1.y >= R2.p2.y) area = 0; else area = abs(max(R1.p1.x, R2.p1.x) - min(R1.p2.x, R2.p2.x)) * abs(max(R1.p1.y, R2.p1.y) - min(R1.p2.y, R2.p2.y)); printf("%d\n",area); } struct point makepoint(int x,int y) { struct point temp; temp.x = x; temp.y = y; return temp; } struct rect makerect(struct point p1,struct point p2) { struct rect temp; temp.p1 = p1; temp.p2 = p2; return temp; } struct rect guifanrect(struct rect r) { struct rect temp; temp.p1.x = min (r.p1.x, r.p2.x); temp.p1.y = min (r.p1.y, r.p2.y); temp.p2.x = max (r.p1.x, r.p2.x); temp.p2.y = max (r.p1.y, r.p2.y); return temp; }