当前位置: 首页 > article >正文

华为OD机试真题——矩形绘制(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 A卷 200分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《矩形绘制》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C

GO


题目名称:矩形绘制


知识点:字符串、集合操作、逻辑处理
时间限制:1秒
空间限制:256MB
限定语言:不限


题目描述

实现一个简单的绘图模块,绘图模块仅支持矩形的绘制和擦除。

  • 当新绘制的矩形与已有图形重叠时,对图形取并集
  • 当新擦除的矩形与已有图形重叠时,对图形取差集
    给定一系列绘制和擦除操作,计算最终图形的面积。

输入描述
第一行为操作数N,接下来的N行格式为:

  • d x1 y1 x2 y2d表示绘制操作,(x1,y1)为矩形左上角坐标,(x2,y2)右下角坐标;
  • e x1 y1 x2 y2e表示擦除操作,坐标含义同上。
    坐标均为整数且范围在[-100, 100]内,用例保证坐标有效性。

输出描述
输出最终图形的面积。

示例1
输入:

2  
d 0 2 2 0  
d -1 1 1 -1  

输出:
7
在这里插入图片描述

示例2
输入:

2  
d 0 2 2 0  
e -1 1 1 -1  

输出:
3
在这里插入图片描述

说明

  • 核心思路:将矩形分解为小方格(如1x1单元),通过集合存储有效方格,最终统计总数即为面积。
  • 关键操作:遍历矩形范围内的所有小格,根据操作类型(d/e)增减集合内容。

Java

问题分析

我们需要处理一系列的矩形绘制和擦除操作,最终计算剩余图形的面积。每次操作会影响当前图形的覆盖区域,绘制操作会合并重叠区域,而擦除操作会移除重叠区域。核心在于高效表示和处理这些矩形的覆盖区域。

解题思路

  1. 小方格分解:将每个矩形分解为1x1的小方格,使用集合存储这些方格。
  2. 并集与差集操作:绘制操作将方格加入集合,擦除操作将方格移出集合。
  3. 面积计算:最终集合的大小即为剩余方格的个数,即面积。

代码实现

import java.util.HashSet;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = Integer.parseInt(scanner.nextLine()); // 读取操作数HashSet<Integer> set = new HashSet<>(); // 存储所有被覆盖的格子for (int i = 0; i < N; i++) {String[] parts = scanner.nextLine().split(" ");String op = parts[0];int x1 = Integer.parseInt(parts[1]);int y1 = Integer.parseInt(parts[2]);int x2 = Integer.parseInt(parts[3]);int y2 = Integer.parseInt(parts[4]);// 处理坐标顺序,确保xStart <= xEnd,yLow <= yHighint xStart = Math.min(x1, x2);int xEnd = Math.max(x1, x2);int yLow = Math.min(y1, y2);int yHigh = Math.max(y1, y2);// 遍历所有i和j,生成格子的唯一编码for (int x = xStart; x < xEnd; x++) { // x的范围是[xStart, xEnd)for (int y = yLow; y < yHigh; y++) { // y的范围是[yLow, yHigh)int code = x * 1000 + y; // 将坐标编码为唯一整数if (op.equals("d")) {set.add(code); // 绘制操作:添加格子} else {set.remove(code); // 擦除操作:移除格子}}}}System.out.println(set.size()); // 输出剩余格子数量即面积}
}

代码详细解析

  1. 读取输入:首先读取操作数 N,然后逐行读取每个操作。
  2. 坐标处理:确保矩形的 xy 坐标的正确顺序,以便正确遍历所有覆盖的小方格。
  3. 编码格子:将每个方格的坐标 (x, y) 编码为一个唯一的整数,例如 x * 1000 + y,避免字符串操作提升效率。
  4. 集合操作:根据操作类型(de)添加或移除对应的格子。
  5. 输出结果:集合的大小即为最终覆盖的格子数量,即所求面积。

示例测试

示例1
输入:

2
d 0 2 2 0
d -1 1 1 -1

输出:

7

解析:两个矩形覆盖的方格分别为4个和4个

http://www.lryc.cn/news/2395270.html

相关文章:

  • 通义开源视觉感知多模态 RAG 推理框架 VRAG-RL:开启多模态推理新时代
  • 爬虫入门:从基础到实战全攻略
  • qemu安装risc-V 64
  • JDBC连不上mysql:Unable to load authentication plugin ‘caching_sha2_password‘.
  • AsyncIOScheduler与BackgroundScheduler的线程模型对比
  • Python+MongoDb使用手册(精简)
  • 前端面经 协商缓存和强缓存
  • MacOS安装Docker Desktop并汉化
  • Centos系统搭建主备DNS服务
  • VUE项目部署IIS服务器手册
  • 使用 HTML + JavaScript 实现在线考试系统
  • 谷歌工作自动化——仙盟大衍灵机——仙盟创梦IDE
  • 嵌入式(C语言篇)Day13
  • Oracle 的V$LOCK 视图详解
  • 秒杀系统—1.架构设计和方案简介
  • 基于FashionMnist数据集的自监督学习(生成式自监督学习AE算法)
  • 从监控到告警:Prometheus+Grafana+Alertmanager+告警通知服务全链路落地实践
  • AUTOSAR图解==>AUTOSAR_EXP_AIADASAndVMC
  • WPF【09】WPF基础入门 (三层架构与MVC架构)
  • macOS 风格番茄计时器:设计与实现详解
  • 中文NLP with fastai - Fastai Part4
  • oracle goldengate实现远程抽取postgresql 到 postgresql的实时同步【绝对无坑版,亲测流程验证】
  • 【MYSQL】索引篇(一)
  • ISCC-2025-web-wp
  • 鸿蒙分辨率
  • @Docker Compose 部署 Pushgateway
  • 我们来学mysql -- 从库重启,是否同步主库数据
  • King3399(ubuntu文件系统)iic(i2c)功能测试
  • 德思特新闻 | 德思特与es:saar正式建立合作伙伴关系
  • 基于原生JavaScript前端和 Flask 后端的Todo 应用