题目 1471:【蓝桥杯】矩形面积交

题目 1471:【蓝桥杯】矩形面积交


跟着马老师一起刷蓝桥杯

马老师的题目链接


1. 题目描述

平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

2. 输入

输入仅包含两行,每行描述一个矩形。

在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

3. 输出

输出仅包含一个实数,为交的面积,保留到小数后两位。

4. 样例输入

1 1 3 3 
2 2 4 4 

5. 样例输出

1.00

 6. 题解:

xy1 = list(map(float,input().split()))
xy2 = list(map(float,input().split()))
rx = min(max(xy1[0],xy1[2]),max(xy2[0],xy2[2]))
lx = max(min(xy1[0],xy1[2]),min(xy2[0],xy2[2]))
uy = min(max(xy1[1],xy1[3]),max(xy2[1],xy2[3]))
dy = max(min(xy1[1],xy1[3]),min(xy2[1],xy2[3]))
w,h = rx-lx,uy-dy
if w<=0.0 or h<=0.00:
    print("0.00")
else:
    #print((str(w*h)+"00").split(".")[0]+"."+(str(w*h)+"00").split(".")[1][:2:])    不进位输出小数点后两位
    print("%.2f"%(w*h))

马老师的思路:

#思路:

# 要对矩形做规范化处理。即左上角的坐标要小于右下角的坐标。
# 根据不同情况分别确定相交矩形左右上下,四条边的x,y坐标。
# 根据坐标确定矩形的长与宽。
# 求出矩形的面积。



while True:
    try:
        a = list(map(float, input().strip().split()))
        b = list(map(float, input().strip().split()))
        
        # 对矩形做规范化处理
        a = [min(a[0], a[2]), min(a[1], a[3]), max(a[0], a[2]), max(a[1], a[3])]
        b = [min(b[0], b[2]), min(b[1], b[3]), max(b[0], b[2]), max(b[1], b[3])]
        
        # 确定每条边的坐标
        xl = max(a[0], b[0])
        xr = min(a[2], b[2])
        yup = max(a[1], b[1])
        ydown = min(a[3], b[3])
        
        # 确定矩阵的长与宽
        w = xr - xl
        h = ydown - yup
        
        # 求出矩形的面积
        if w > 0 and h > 0:
            print("%.2f" % (w * h))
        else:
            print("0.00")
    except:
        break

猜你喜欢

转载自blog.csdn.net/adminkeys/article/details/112972164