您当前的位置: 首页 >  蓝桥杯

不牌不改

暂无认证

  • 0浏览

    0关注

    422博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[蓝桥杯][基础练习VIP]矩形面积交

不牌不改 发布时间:2021-07-27 10:15:07 ,浏览量:0

题目

题目链接

题解

根据第一行数据确定第一个矩形的上下左右边界坐标; 根据第二行数据确定第二个矩形的上下左右边界坐标;

若二者相交,则相交的矩形一定是夹在这些边界坐标之间(这是比较抽象的理解,理解不了就算了) 或者通过画图也可以发现,两个矩形上边界尽可能靠下的就是相交矩形的上边界,下边界尽可能靠上的是相交矩形的下边界,同理,两个矩形左边界的较大者是相交矩形的左边界,两个矩形右边界的较小者是相交矩形的右边界,这就体现了夹在中间的感觉。 上下边界坐标差乘以左右边界坐标差即为相交矩形面积。

BUT!!! 二者不相交的话,正确答案应该为0.00,但是仍按上述方式来计算会得到负数乘以负数,仍为正数的结果,显然不对。 因此我们要进行特判。 当上下边界坐标差和左右边界坐标差存在一个为非正数时,直接输出0.00,表示相离。

代码
#include
using namespace std;
const double esp = 1e-8;

double x1, x2, x3, x4, ya, y2, y3, y4; // 因为y1好像在头文件中被定义过,不能用就换了ya
double l1, l2, r1, r2, d1, d2, u1, u2;
double l, r, u, d;

int main()
{
	scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &x1, &ya, &x2, &y2, &x3, &y3, &x4, &y4);
	l1 = min(x1, x2); r1 = max(x1, x2); // 第一个矩形的左边界和右边界
	l2 = min(x3, x4); r2 = max(x3, x4); // 第二个矩形的左边界和右边界
	d1 = min(ya, y2); u1 = max(ya, y2); // 第一个矩形的下边界和上边界
	d2 = min(y3, y4); u2 = max(y3, y4); // 第二个矩形的下边界和上边界
	l = max(l1, l2); r = min(r1, r2); d = max(d1, d2); u = min(u1, u2); // 相交部分的左边界为两个矩形左边界的较大者,有边界为二者右边界的较小者,上边界为二者上边界的较小者,下边界为二者下边界的较大者
	if(r-l             
关注
打赏
1662186765
查看更多评论
0.0390s