华为OD机试 - 矩形相交的面积 - 逻辑分析(Java 2023 B卷 100分)

2023-11-14

在这里插入图片描述

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

给出3组点坐标(x,y,w,h),-1000<x,y<1000,w,h为正整数。

(x,y,w,h)表示平面直角坐标系中的一个矩形:

x,y为矩形左上角坐标点,向右w,向下h。

(x,y,w,h)表示x轴(x,x+w)和y轴(y,y-h)围成的矩形区域

(0,0,2,2)表示x轴(0,2)和y轴(0,-2)围成的矩形区域:

(3,5,4,6)表示x轴(3,7)和y轴(5,-1)围成的矩形区域

求3组坐标构成的矩形区域重合部分的面积。

二、输入描述

3行输入分别为3个矩形的位置,分别代表“左上角x坐标”“左上角y坐标”"矩形宽”

"矩形高”-1000<=x,y<1000

三、输出描述

输出3个矩形相交的面积,不相交的输出0。

例如:

1、输入:

1 6 4 4
3 5 3 4
0 3 7 3

2、输出:

2

3、说明

在这里插入图片描述

四、解题思路

  1. 输入3行矩形的位置,分别代表“左上角x坐标”、“左上角y坐标”、"向右w”、"向下h”,表示3个矩形;
  2. 计算矩形相交;
    • 取最小x1;
    • 取最大x2;
    • 取最小y1;
    • 取最大y2;
  3. 通过x轴 * Y轴计算矩形相交的面积。

五、Java算法源码

package com.guor.od;

import lombok.Data;

import java.util.*;

public class OdTest01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Rectangle> list = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            // 矩形的位置,分别代表“左上角x坐标”、“左上角y坐标”、"向右w”、"向下h”
            int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
            // x坐标
            int x = arr[0];
            // y坐标
            int y = arr[1];
            // 向右w
            int w = arr[2];
            // 向下h
            int h = arr[3];
            list.add(new Rectangle(y, y - h, x, x + w));
        }

        // 计算矩形相交
        Rectangle intersect = intersect(intersect(list.get(0), list.get(1)), list.get(2));
        if (intersect == null) {
            System.out.println(0);
        }else {
            System.out.println((intersect.y2 - intersect.y1) * (intersect.x1 - intersect.x2));
        }
    }

    // 计算矩形相交
    public static Rectangle intersect(Rectangle r1, Rectangle r2) {
        if (r1 == null || r2 == null) {
            return null;
        }

        Rectangle rectangle = new Rectangle();
        // 取最小x1
        rectangle.x1 = Math.min(r1.x1, r2.x1);
        // 取最大x2
        rectangle.x2 = Math.max(r1.x2, r2.x2);
        // 取最小y1
        rectangle.y1 = Math.max(r1.y1, r2.y1);
        // 取最大y2
        rectangle.y2 = Math.min(r1.y2, r2.y2);

        if (rectangle.x1 <= rectangle.x2 || rectangle.y1 >= rectangle.y2) {
            return null;
        }
        return rectangle;
    }
}

/**
 * 矩形
 */
class Rectangle {
    public int x1;
    public int x2;
    public int y1;
    public int y2;

    public Rectangle() {
    }

    public Rectangle(int x1, int x2, int y1, int y2) {
        this.x1 = x1;
        this.x2 = x2;
        this.y1 = y1;
        this.y2 = y2;
    }
}

六、效果展示

1、输入

0 3 6 3
1 4 6 3
4 5 4 5

2、输出

4

3、说明

在这里插入图片描述
在这里插入图片描述


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为OD机试 - 矩形相交的面积 - 逻辑分析(Java 2023 B卷 100分) 的相关文章

  • 按下按钮并在java中的新窗口中打开文件

    我创建了一个 JFrame 并放置了一个文本字段和按钮 在文本字段中我放置了从文本文件读取的名称 我知道我想单击按钮并打开一个已知窗口 我想在其中放置名称 其他信息来自同一个文件 这是我的代码 这是我的主框架 package Fronten
  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • 如何在java中将数组值排序为循环格式?

    我的数组值如下 String value 1 2 3 4 5 6 7 8 9 10 假设如果我将值 5 传递给 tat 数组 它应该按如下顺序排序 5 6 7 8 9 10 1 2 3 4 怎么办 有人帮忙吗 感谢你 你需要的就是所谓的轮换
  • 如何在 JavaFX 中连接可观察列表?

    我所说的串联是指获得一个新列表 该列表侦听所有串联部分的更改 方法的目的是什么FXCollections concat ObservableList
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • 断言 Kafka 发送有效

    我正在使用 Spring Boot 编写一个应用程序 因此要写信给 Kafka 我这样做 Autowired private KafkaTemplate
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • Java Applet 中的 Apache FOP - 未找到数据的 ImagePreloader

    我正在研究成熟商业产品中的一个问题 简而言之 我们使用 Apache POI 库的一部分来读取 Word DOC 或 DOCX 文件 并将其转换为 XSL FO 以便我们可以进行标记替换 然后 我们使用嵌入到 Java 程序中的 FOP 将
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • 在java中以原子方式获取多个锁

    我有以下代码 注意 为了可读性 我尽可能简化了代码 如果我忘记了任何关键部分 请告诉我 public class User private Relations relations public User relations new Rela

随机推荐