三十八:矩形面积交

时间:2023-01-11 20:44:22

问题:矩形面积交

题目描述

平面上有两个矩形,它们的边平行于直角坐标系的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;
}