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

华为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.xdnf.cn/news/701263.html

相关文章:

  • 数据库表与实体类设计
  • 中望CAD与AutoCAD的SWOT对比分析(基于2025线上发布会观察与行业数据)
  • 阿里云云效对接SDK获取流水线制品
  • C++模板语法大全
  • Rust 的Hello World
  • 在qt中使用c++实现与Twincat3 PLC变量通信
  • 知行之桥如何将消息推送到钉钉群?
  • 前端面经 hook 获取dom元素
  • Cookie与Session简介-笔记
  • 代谢测定试剂盒_生化制剂_Sigma-Aldrich®实验室用品及生产材料
  • FastApi学习
  • AMBA-AHB的控制信号
  • jenkins部署slave动态节点
  • java 开发中 nps的内网穿透 再git 远程访问 以及第三放支付接口本地调试中的作用
  • 使用 find 遍历软链接目录时,为什么必须加 -L
  • 华为OD最新机试真题-按单词下标区间翻转文章内容-OD统一考试(B卷)
  • 【案例95】“小”问题引发的“大”发现---记一次环境修复
  • 十六进制数据转换为对应的字符串
  • Python 如何让自动驾驶的“眼睛”和“大脑”真正融合?——传感器数据融合的关键技术解析
  • Java+POI+EXCEL导出柱形图(多列和单列柱形图)
  • 外骨骼驾驶舱HOMIE——3500元让人形机器人1:1复刻人类动作:类似Mobile ALOHA主从臂的主从分离版
  • 深度学习入门:从零搭建你的第一个神经网络
  • Vue3对接deepseek实现ai对话
  • 系统性学习C语言-第十讲-操作符详讲
  • javascript中运算符的优先级
  • 如何把示例数据0.617、0.229、0.174保留两位小数,并在后面添加%处理,处理后的结果如下:61.7%、22.9%、17.4%
  • Java | 韩顺平 循序渐进学Java自用笔记---OOP高级(二)
  • Kaggle-基于xgboost的销量预测
  • Java基础 Day23
  • ROC和生存曲线的绘制-spss