1. 程式人生 > 其它 >題目 1471:【藍橋杯】矩形面積交

題目 1471:【藍橋杯】矩形面積交

技術標籤:Pythonpython

題目 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