:矩形相交的面积 | 时间限制:1 秒 | 内存限制:262144K | 语言限制:不限
在坐标系中,给定 3 个矩形,求相交区域的面积
输入描述:
3 行输入分别为 3 个矩形的位置,分别代表
‘左上角 x 坐标’,‘左上角 y 坐标’,‘矩形宽’,‘矩形高’
-1000 <= x,y < 1000
输出描述:
输出 3 个矩形相交的面积,不相交的输出 0
示例 1
输入
1 6 4 4
3 5 3 4
0 3 7 3
输出
2
说明
给定 3 个矩形 A,B,CA:左上角坐标(1, 6),宽 4,高 4
B:左上角坐标(3, 5),宽 3,高 4
C:左上角坐标(0, 3),宽 7,高 3
3 个矩形的相交面积为 2,如图所示
代码如下:
*****************************************代码分界线*********************************************
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include <stdio.h>
#include<math.h>
void main()
{
int matrix[3][4];
int i, j;
for(i=0;i<3;i++)
for (j = 0; j < 4; j++)
{
scanf("%d", &matrix[i][j]);
}
int x[6], y[6];
int count = 0;
for (i = 0; i < 3; i++)
{
x[count] = matrix[i][0];
y[count] = matrix[i][1];
count++;
x[count] = matrix[i][0] + matrix[i][2];
y[count] = matrix[i][1] - matrix[i][3];
count++;
}
int cn1;
for(i=0;i<6;i++)
for (j = i+1; j < 6; j++)
{
if (x[i] > x[j])
{
cn1 = x[i];
x[i] = x[j];
x[j] = cn1;
}
if (y[i] > y[j])
{
cn1 = y[i];
y[i] = y[j];
y[j] = cn1;
}
}
if (x[2] >= matrix[0][0] && x[2] >= matrix[1][0] && x[2] >= matrix[2][0] && x[3] <= matrix[0][0] + matrix[0][2] && x[3] <= matrix[1][0] + matrix[1][2]
&& x[3] <= matrix[2][0] + matrix[2][2] && y[3] <= matrix[0][1] && y[3] <= matrix[1][1] && y[3] <= matrix[2][1] && y[2] >= matrix[0][1] - matrix[0][3]
&& y[2] >= matrix[1][1] - matrix[1][3] && y[2] >= matrix[2][1] - matrix[2][3])
{
printf("%d", (x[3] - x[2]) * (y[3] - y[2]));
}
else
printf("0");
}
*****************************************代码分界线*********************************************
思路:找到三个矩形的横纵坐标边界,将6个横坐标存放在x数组中,6个纵坐标放在y数组中,然后排序,接着分别把两个数组中间的两个数拿出来,看看这四个数是否同时位于三个矩形的横纵坐标范围内(对应代码中间的那一大段if的判断条件),如果不符合条件说明不存在三个矩形的重叠部分,输出0,如果存在,则计算这四个横纵坐标组成的矩形的面积。