最開始我是分情況討論各種相交的情況,發現判斷語句寫的非常繁瑣,容易漏掉情況。其實這道題最簡單的做法是:
(1)找出不相交的通用判斷方法
當乙個矩形的橫(縱)座標的最大值小於另一矩形橫(縱)座標的最小值時,不相交
(2)找出相交情況面積的通用計算方法
相交的形狀是個長方形,因此只需要計算長和寬。計算長:將四個橫座標公升序排序,第三個減去第二個;同樣的方法計算寬。
完成上面兩步,我們的程式設計邏輯就會變得非常清晰,乙個if/else判斷語句即可實現。
平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。
輸入僅包含兩行,每行描述乙個矩形。
在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10^7的實數表示。
輸出僅包含乙個實數,為交的面積,保留到小數後兩位。
1 1 3 3
2 2 4 4
1.00
程式清單:
#include
#include
using
namespace std;
intmain()
return0;
}
這裡也提供另一種方法,原理和上面一樣。
#include
#include
#include
using
namespace std;
intmain()
;double b[4]
=;for(
int i=
0;i<
4;i++
)//輸入矩形a
cin>>a[i]
;for
(int i=
0;i<
4;i++
)//輸入矩形b
cin>>b[i]
;double x[4]
=;//將所有的橫座標存入陣列x,等待排序
double y[4]
=;//將所有的縱座標存入陣列y,等待排序
double max_ax=
max(a[0]
,a[2])
;double max_ay=
max(a[1]
,a[3])
;double max_bx=
max(b[0]
,b[2])
;double max_by=
max(b[1]
,b[3])
;double min_ax=
min(a[0]
,a[2])
;double min_ay=
min(a[1]
,a[3])
;double min_bx=
min(b[0]
,b[2])
;double min_by=
min(b[1]
,b[3])
;//當乙個矩形橫(縱)座標的最大值小於另一矩形橫(縱)座標的最小值時,不相交。
if(max_ax<=min_bx||max_ay<=min_by||max_bx<=min_ax||max_by<=min_ay)
cout<<
0.00
return0;
}
基礎訓練 矩形面積交
平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10 7的實數表示。請在這裡描述輸出格式。例如 對每一組輸入,在一行中輸出a b的值。輸出...
藍橋杯 基礎訓練 矩陣面積交
基礎練習 矩形面積交 時間限制 1.0s 記憶體限制 512.0mb 問題描述 平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。輸入格式 輸入僅包含兩行,每行描述乙個矩形。在每行中,給出矩形的一對相對頂點的座標...
基礎練習 矩形面積交
問題描述 平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。輸入格式 輸入僅包含兩行,每行描述乙個矩形。在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10 7的實數表示。輸出格式 輸出僅...