问题:矩形面积交
题目描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。输入
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00
#include<stdio.h> int main(){ float m; float a[6],b[6],x[6],y[6]; int i,j; for(i=0;i<4;i++) scanf("%f",&a[i]); for(i=0;i<4;i++) scanf("%f",&b[i]); x[0]=a[0],x[1]=a[2],x[2]=b[0],x[3]=b[2]; y[0]=a[1],y[1]=a[3],y[2]=b[1],y[3]=b[3]; if(a[0]<a[2]){ a[0]=a[0]+a[2]; a[2]=a[0]-a[2]; a[0]=a[0]-a[2];} if(b[0]<b[2]){ b[0]=b[0]+b[2]; b[2]=b[0]-b[2]; b[0]=b[0]-b[2];} if(a[1]<a[3]){ a[1]=a[1]+a[3]; a[3]=a[1]-a[3]; a[1]=a[1]-a[3];} if(b[1]<b[3]){ b[1]=b[1]+b[3]; b[3]=b[1]-b[3]; b[1]=b[1]-b[3]; } if(a[0]<=b[2]||b[0]<=a[2]||a[1]<=b[3]||a[3]>=b[1]) printf("0.00"); else{ for(i=0;i<4;i++) for(j=i+1;j<4;j++) if(x[i]<x[j]){ x[i]=x[i]+x[j]; x[j]=x[i]-x[j]; x[i]=x[i]-x[j]; } for(i=0;i<4;i++) for(j=i+1;j<4;j++) if(y[i]<y[j]){ y[i]=y[i]+y[j]; y[j]=y[i]-y[j]; y[i]=y[i]-y[j]; } m=(x[1]-x[2])*(y[1]-y[2]); printf("%.2f",m); } return 0; }