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);
}
}