2025 A卷 100分 題型
本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式;
并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析;
本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分享》
華為OD機試真題《矩形相交的面積》:
文章快捷目錄
題目描述及說明
Java
python
JavaScript
C
GO
題目名稱:矩形相交的面積
- 知識點:幾何計算、邊界判斷
- 時間限制:1秒
- 空間限制:256MB
- 限定語言:不限
題目描述
在平面直角坐標系中,給定3個矩形,每個矩形由其左上角坐標(x, y)、寬度(w)和高度(h)表示,格式為 (x, y, w, h)
。其中:
x, y
為矩形左上角的坐標,滿足-1000 ≤ x, y < 1000
。w, h
為正整數,表示矩形向右延伸w
單位、向下延伸h
單位。- 矩形區域定義為:x軸范圍
[x, x+w)
,y軸范圍[y-h, y)
。
輸入描述:
輸入共3行,每行包含4個整數,分別表示一個矩形的 x, y, w, h
。
輸出描述:
輸出3個矩形相交區域的面積,若不相交則輸出 0
。
示例:
輸入:
1 6 4 4
3 5 3 4
0 3 7 3
輸出:
2
說明:三個矩形相交的區域面積為2。
Java
問題分析
我們需要計算三個矩形的相交區域面積。每個矩形由其左上角坐標 (x, y)、寬度 (w) 和高度 (h) 定義,其中矩形在 x 軸的范圍是 [x, x + w),在 y 軸的范圍是 [y - h, y)。三個矩形相交的面積是它們在 x 軸和 y 軸上共同重疊區域的乘積。
解題思路
- 解析輸入:讀取三個矩形的參數。
- 計算每個矩形的坐標范圍:將每個矩形的 x 軸和 y 軸范圍表示為區間。
- 求交集:找到三個矩形在 x 軸和 y 軸上的最大左邊界和最小右邊界。
- 計算面積:若交集存在(即左邊界 < 右邊界),面積即為寬高乘積,否則為 0。
代碼實現
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 讀取并解析三個矩形的參數int[][] rects = new int[3][4];for (int i = 0; i < 3; i++) {String line = scanner.nextLine().trim();String[] parts = line.split("\\s+");for (int j = 0; j < 4; j++) {rects[i][j] = Integer.parseInt(parts[j]);}}// 計算每個矩形的x軸和y軸范圍int[] xStarts = new int[3];int[] xEnds = new int[3];int[] yStarts = new int[3];int[] yEnds = new int[3];for (int i = 0; i < 3; i++) {int x = rects[i][0];int y = rects[i][1];int w = rects[i][2];int h = rects[i][3];xStarts[i] = x; // x軸左邊界xEnds[i] = x + w; // x軸右邊界yStarts[i] = y - h; // y軸下邊界yEnds[i] = y; // y軸上邊界}// 計算x軸的交集:最大左邊界和最小右邊界int maxXStart = Math.max(xStarts[0], Math.max(xStarts[1], xStarts[2]));int minXEnd = Math.min(xEnds[0], Math.min(xEnds[1], xEnds[2]));int width = minXEnd - maxXStart; // 交集寬度// 計算y軸的交集:最大下邊界和最小上邊界int maxYStart = Math.max(yStarts[0], Math.max(yStarts[1], yStarts[2]));int minYEnd = Math.min(yEnds[0], Math.min(yEnds[1], yEnds[2]));int height = minYEnd - max