Problem B 1263 矩形面积的并

这篇博客介绍了一个C语言程序,用于计算两个边平行于坐标轴的矩形的面积并。程序首先读取每个矩形的对角线端点坐标,然后判断两个矩形是否相交。如果相交,会通过排序和计算相交部分的尺寸来减去公共面积,从而得到总面积。最后,程序输出每个样例的结果。注意,程序中使用了`qsort`进行排序以确定相交部分的长度和宽度。
摘要由CSDN通过智能技术生成

2021年下学期《C语言程序设计》作业8-函数2 

Description

矩形面积的并

题目描述

给两个边平行于坐标轴的矩形,求两个矩形的面积并。

输入

存在多个样例,每个样例包括2行,每行是一个矩形,为矩形一个对角线端点的坐标x1,y1,x2,y2,0≤x1,y1,x2,y2≤1000。

输出

每行输出一个样例的结果。

矩形面积的并指的是,将两个矩形的面积求并集。

也就是说,如果两个矩形不相交,那么它们的并就是面积之和。

否则为面积和减去公共面积。

 要小心X1,X2,X3,X4之间的关系。

#include<stdio.h> //坑 
#include<math.h>  //坑
#include<algorithm>
#include<cstring>
using namespace std;
int cmp (const void * a, const void * b) {
    return ( *(int*)a - * (int*)b ); //从小到大排序
}
int main() {
    int x[4];
    int y[4];
    while (scanf("%d %d %d %d", &x[0], &y[0], &x[1], &y[1]) == 4 && scanf("%d %d %d %d", &x[2], &y[2], &x[3], &y[3]) == 4) {
        int xx = 0, yy = 0;//相交部分矩形的长和宽。

        int x1 = x[0] < x[1] ? x[0] : x[1];
        int x2 = x[0] < x[1] ? x[1] : x[0];

        int x3 = x[2] < x[3] ? x[2] : x[3];
        int x4 = x[2] < x[3] ? x[3] : x[2];
        if ((x2 >= x3 && x2 <= x4) || (x4 >= x1 && x4 <= x2)) { //确定X轴是否相交。
            qsort(x, 4, sizeof(int), cmp);
            xx = x[2] - x[1];
        }


        int y1 = y[0] < y[1] ? y[0] : y[1];
        int y2 = y[0] < y[1] ? y[1] : y[0];

        int y3 = y[2] < y[3] ? y[2] : y[3];
        int y4 = y[2] < y[3] ? y[3] : y[2];
        if ((y2 >= y3 && y2 <= y4) || (y4 >= y1 && y4 <= y2)) { //确定Y轴是否相交。
            qsort(y, 4, sizeof(int), cmp);
            yy = y[2] - y[1];
        }
        int ans = (x2 - x1) * (y2 - y1) + (x4 - x3) * (y4 - y3) - xx * yy;
        printf("%d\n", ans);
    }
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SQ_ZYX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值