华为OD机试真题——矩形相交的面积(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
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