牛客网题目:矩形相交的面积(C语言)

:矩形相交的面积 | 时间限制: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,如果存在,则计算这四个横纵坐标组成的矩形的面积。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值