【藍橋杯】基礎練習 矩形面積交
阿新 • • 發佈:2018-12-09
問題描述
平面上有兩個矩形,它們的邊平行於直角座標系的X軸或Y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。
輸入格式
輸入僅包含兩行,每行描述一個矩形。
在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10^7的實數表示。
輸出格式
輸出僅包含一個實數,為交的面積,保留到小數後兩位。
樣例輸入
1 1 3 3
2 2 4 4
樣例輸出
1.00
很基礎的題目,可是我腦子笨想了好久,摳腳大漢嚶嚶嚶~~~~~
看題目應該是為後面線段樹+掃描線的題型打基礎吧嚶嚶嚶~~~~
思路:(1)首先判斷矩形A和B是否相離 (思考了很久才想到,證明自己也是挺蠢的哈哈哈)
找到矩形A中X座標較大的,再找到矩形B中X座標較大的,在得到的兩個數中取較小的賦值給a;
找到矩形A中X座標較小的,再找到矩形B中X座標較小的,在得到的兩個數中取較大的賦值給b;
找到矩形A中Y座標較大的,再找到矩形B中Y座標較大的,在得到的兩個數中取較小的賦值給c;
找到矩形A中Y座標較小的,再找到矩形B中Y座標較小的,在得到的兩個數中取較大的賦值給d;
若(a - b > 0 && c - d > 0)滿足,則說明兩個矩形相交或內含;
大家可以隨便畫一個相交的圖體會一下嚶嚶嚶~~~
(2)矩形的重合面積S=(a - b) * (c - d);
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double x1 = sc.nextDouble(); double y1 = sc.nextDouble(); double x2 = sc.nextDouble(); double y2 = sc.nextDouble(); double x3 = sc.nextDouble(); double y3 = sc.nextDouble(); double x4 = sc.nextDouble(); double y4 = sc.nextDouble(); double a = Math.min(Math.max(x1, x2), Math.max(x3, x4));// 兩個矩形中分別最大X座標中的最小值 double b = Math.max(Math.min(x1, x2), Math.min(x3, x4));// 兩個矩形中分別最小X座標中的最大值 double c = Math.min(Math.max(y1, y2), Math.max(y3, y4));// 兩個矩形中分別最大Y座標中的最小值 double d = Math.max(Math.min(y1, y2), Math.min(y3, y4));// 兩個矩形中分別最小Y座標中的最大值 if (a - b > 0 && c - d > 0) {// 說明兩個矩形相交或內含 System.out.printf("%.2f", (a - b) * (c - d)); } else System.out.println("0.00"); } }