华为机试题-从(0,0)开始,计算绘图面积-Java

news2024/9/23 7:26:24

代码在最后面

1 题目描述

绘图机器的绘图笔初始位置在原点(0,0),机器启动后按照以下规则来进行绘制直线。

  1. 尝试沿着横线坐标正向绘制直线直到给定的终点E。
  2. 期间可以通过指令在纵坐标轴方向进行偏移,offset Y为正数表示正向偏移,为负数表示负向偏移。

现在给定的横坐标终点值E以及若干条绘制指令,请计算绘制的直线和横坐标轴以及x=E的直线组成的图形面积。

2 输入描述

首行为两个整数N和E,表示有N条指令,机器运行的横坐标终点值E。接下来N行每行两个整数表示一条绘制指令X offsetY。用例保证横坐标X以递增排序的方式出现,且不会出现相同横坐标X。

取值范围:
0<N<=10000
0<=X<=E<=20000
-10000<=offsetY<=10000

3 输出描述

一个整数表示计算得到的面积用例保证结果范围在0到4294967295之内。

4 示例

4.1 示例1

输入	
4 10
1 1
2 1
3 1
4 -2

输出	
12

解释:
根据上述指令,绘制图形如下图所示:
在这里插入图片描述
如图,蓝色和红色围起来的,1+2+3+6 = 12

4.2 示例2

输入	
2 4
0 1
2 -2

输出	
4

解释:
根据上述指令,绘制图形如下图所示:
在这里插入图片描述
2 + 2 = 4

5 代码解题

思路:每个图形可以切割为多个矩形,然后求矩形面积和即可。例如示例1,可以做如下切割:
在这里插入图片描述
可以观察到,总面积 = 矩形1 + 矩形2 + 矩形3 + 矩形4。
每个矩形的面积取决于左上角的点和右上角的点【如果在X轴下方,则是左下和右下】,而根据题意,会提供X offset Y,也就是说,后一个点的X是右上点的x值坐标,前一个点的X是左上点的x值坐标,整体高度取决于前一个点的高度。
例如:
1 1 // 第一次输入
2 1 // 第二次输入
4 1 // 第三次输入
连续起来,可以得到第一次和第二次输入的X轴宽度为 2 - 1 = 1,高度取第一个点的输入值为 1。依次类推,第二个矩形X轴宽 2 = 4 - 2,高为2【理解题意,是累加的】。
由此,可得整体解题思路为,记每次输入的前一个点的坐标为(x0, y0),当前输入的值为 (w, h),两点之间的和X轴组成的面积 = (w - X0) * abs(y0),更新x0 = w; y0 = y0 + h即可得下次输入时的上一个点信息。同时考虑到最终点E的闭合问题,默认增加一次最后输入值为 (E,-y0),即满足x = E的线信息。
但是实际计算过程中,我们只需要左上角的点即可,因为相邻两个矩形之间,是紧凑的,后一个点的Y值并不会考虑在计算范围内。

5.1 解法一

记录所有输入的点,然后for循环算出面积求和

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        String[] split = line.split(" ");
        final int N = Integer.parseInt(split[0]);
        final int E = Integer.parseInt(split[1]);
        int[][] points = new int[N + 2][2];
        // 录入起点
        points[0] = new int[]{0, 0};
        // 录入终点,最后一个点的右上角不用考虑,因为用不到,所以用 0 代替
        points[N + 1] = new int[]{E, 0};
        for (int i = 1; i < N + 1; i++) {
            String c = scanner.nextLine();
            String[] arr = c.split(" ");
            int x = Integer.parseInt(arr[0]);
            int y = Integer.parseInt(arr[1]) + points[i - 1][1];
            points[i] = new int[]{x, y};
        }
        scanner.close();
        long area = calcArea(points);
        System.out.println(area);
    }

    // 根据点,计算面积
    public static long calcArea(int[][] points){
        int len = points.length;
        long area = 0;
        for (int i = 1; i < len; ++i) {
            area += (long) (points[i][0] - points[i - 1][0]) * Math.abs(points[i - 1][1]);
        }
        return area;
    }
}

解法二

其实没有必要罗列这些点,可以在每次输入的时候,就直接计算面积,然后累加。优化上面的代码,如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        String[] split = line.split(" ");
        final int N = Integer.parseInt(split[0]);
        final int E = Integer.parseInt(split[1]);
        long area = 0;
        int x = 0, y = 0;
        for (int i = 1; i < N + 1; i++) {
            String c = scanner.nextLine();
            String[] arr = c.split(" ");
            int inputX = Integer.parseInt(arr[0]);
            int inputY = Integer.parseInt(arr[1]);
            area += (long) (inputX - x) * Math.abs(y);
            x = inputX;
            y += inputY;
        }
        scanner.close();
        System.out.println(area);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux源码安装mysql8.0的小白教程

1.下载8.x版本的mysql MySQL :: Download MySQL Community Server (Archived Versions) 2.安装linux 我安装的是Rocky Linux8.6 3.设置ip地址,方便远程连接 使用nmcli或者nmtui设置或修改ip地址 4.使用远程连接工具MobaXterm操作: (1)将mysql8版本的压缩包上传到mybaxterm…

【电商选品干货】差异化卖点要这样打造,80%商家却做不到

今天就给大家说说&#xff0c;如何去挖掘产品的差异化卖点&#xff1f;我们要找差异化卖点&#xff0c;就是因为我们的产品转化率不足&#xff0c;通常有下面几点原因&#xff1a; 1、产品差异化卖点不足&#xff0c;商家占比30% 2、流量和产品卖点不匹配&#xff0c;商家占比…

U-2 Net原理+代码实战教程

目录 一、显著性目标检测1.1 核心目标1.2 技术方法 二、U2-Net2.1 双层嵌套U结构2.2 残差U块&#xff08;RSU&#xff09;2.3 网络训练和监督 三、代码实战3.1 克隆仓库3.2 下载预训练模型3.3 安装依赖3.4 运行模型显著性目标检测&#xff1a;训练模型&#xff1a; 一、显著性目…

美团到家平台业务探索

背景 到家业务发展已经近10年&#xff0c;目前最为火热的应该有美团到家、抖音到家等&#xff0c;这种极具挑战性的业务&#xff0c;值得学习和思考。 既然是服务平台化&#xff0c;那一定是兼容了多种业务以及多种模式。 挑战 订单、骑手规模大&#xff0c;供需匹配过程的…

UDS协议——Authentication(29服务)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍诊断和通讯管理功能单元下的29服务Authentication (29 16) service。此服务是在ISO 14229-2020版本中首次增加的为应对网联汽车日益增加的安全风险的新服务。为Client和Server之间的身份认证提供一种方法,以便对意图…

常用3D建模软件有哪些?如何实现3D模型在线预览?

3D建模是指使用计算机软件或其他工具创建三维物体模型的过程。3D建模大概可分为NURBS和多边形网格两类。NURBS对要求精细、弹性与复杂的模型有较好的应用&#xff0c;适合量化生产用途&#xff1b;多边形网格建模则靠拉面方式&#xff0c;适合做效果图与复杂场景动画。建模方法…

论文AIGC率超标,专业去痕工具是快速整改的钥匙,降低学术风险。

在学术领域&#xff0c;独创性是每位研究者梦寐以求的桂冠。随着AI技术的突飞猛进&#xff0c;AI辅助写作软件已成为学术工作者的得力伙伴。尽管如此&#xff0c;这些工具在提供帮助的同时&#xff0c;也引发了一个问题——如何有效减少论文的AI率。AI率&#xff0c;也就是由人…

ubuntu重装系统后,安装cuda,cudnn

一、 先安装驱动&#xff0c;如果驱动安装不成功&#xff0c;会影响桌面&#xff0c;再重装系统还来得及&#xff0c;尝试了很多方法&#xff0c;还是用系统安装最靠谱&#xff1a; 首先进入Ubuntu搜索栏目&#xff0c;找到软件更新器的一个图标&#xff0c;点开之后是这样的。…

Datawhale 2024 年 AI 夏令营第二期——基于术语词典干预的机器翻译挑战赛

#AI夏令营 #Datawhale #夏令营 1.赛事简介 目前神经机器翻译技术已经取得了很大的突破&#xff0c;但在特定领域或行业中&#xff0c;由于机器翻译难以保证术语的一致性&#xff0c;导致翻译效果还不够理想。对于术语名词、人名地名等机器翻译不准确的结果&#xff0c;可以通…

这本书太好了!150页就能让你上手大模型应用开发(免费分享PDF)

如果问个问题&#xff1a;有哪些产品曾经创造了伟大的奇迹&#xff1f;ChatGPT 应该会当之无愧入选。仅仅发布 5 天&#xff0c;ChatGPT 就吸引了 100 万用户——当然&#xff0c;数据不是关键&#xff0c;关键是其背后的技术开启了新的 AI 狂潮&#xff0c;成为技术变革的点火…

浏览器书签助手mTab

本文软件由网友 P家单推人 推荐 什么是 mTab ? mTab 是免费无广告的浏览器书签助手&#xff0c;多端同步、美观易用的在线导航和书签工具&#xff0c;可以用 mTab 书签收藏并自定义常用网站的图标样式&#xff0c;帮助您高效管理网页和应用&#xff0c;提升在线体验。 官方提供…

解决Abaqus2023界面模糊的问题

有没有友友Abaqus成功安装后&#xff0c;打开页面很模糊的。像这个样子&#xff0c;看得时间长了很影响观感。 同样的安装包安装&#xff0c;同样的安装方法在其他电脑上安装后打开是清晰的。这与电脑的屏幕分辨率是有关系的。 下面给出解决办法&#xff1a; 找到你电脑里Ab…

【POSIX信号量】基于环形队列的生产消费模型

文章目录 POSIX信号量初始化信号量销毁信号量等待信号量(P操作)发送信号量&#xff08;V操作&#xff09; 基于环形队列的生产消费模型设计思路代码实现 POSIX信号量 POSIX和System V一样&#xff0c;都是unix下的一套管理方法&#xff0c;下面介绍POSIX标准下的信号量。 POSIX…

亚马逊云科技 Amazon Bedrock 构建 AI 应用体验

前言 大模型应用发展迅速&#xff0c;部署一套AI应用的需求也越来越多&#xff0c;从头部署花费时间太长&#xff0c;然而亚马逊科技全托管式生成式 AI 服务 Amazon Bedrock&#xff0c;Amazon Bedrock 简化了从基础模型到生成式AI应用构建的复杂流程&#xff0c;为客户铺设了…

跳水板00

题目链接 跳水板 题目描述 注意点 返回的长度需要从小到大排列必须正好使用k块木板0 < shorter < longer0 < k < 100000 解答思路 用k块两种不同的木板&#xff0c;组合数为k 1&#xff0c;最小的组合为全部使用shorter&#xff0c;每多一块longer&#xff0…

实验04 白盒测试

知识点 白盒测试概述 白盒测试基于程序内部逻辑结构进行测试&#xff0c;关注程序语句、路径、变量状态等。单元测试主要采用白盒测试方法&#xff0c;辅以黑盒测试方法。程序内部结构示意图 白盒测试关注的对象 源代码 检验代码规范性&#xff0c;查找逻辑、内存管理、数…

Jupyter + Pyspark + Yarn 交互式大数据分析

背景: ​ 小批量数据可以使用pandas 进行分析&#xff0c;方便灵活。但大批量&#xff08;千万级别&#xff09;数据&#xff0c;使用pandas分析处理&#xff0c;速度很慢&#xff0c;且需一次性读取全部数据&#xff0c;内存可能溢出。 ​ 此时使用spark分布式分析处理速度很…

记VMware网络适配器里的自定义特定虚拟网络一直加载问题解决办法

1、问题描述 VMware网络适配器里的自定义特定虚拟网络一直加载问题&#xff1a; 在自定义&#xff1a;特定虚拟网络选择的时候 没有上图所示的三个选择&#xff0c;而是正在加载虚拟网络.... 如下图所示&#xff1a; 2、解决办法 2.1、原因分析&#xff1a; 是安装时候出现…

【Java】Idea运行JDK1.8,Build时中文内容GBK UTF-8编码报错一堆方块码

问题描述 在Windows系统本地运行一个JDK1.8的项目时&#xff0c;包管理用的Gradle&#xff0c;一就编码报错&#xff08;所有的中文内容&#xff0c;包括中文注释、中文的String字面量&#xff09;&#xff0c;但程序还是正常运行。具体如下&#xff1a; 解决 1. Idea更改编…

springboot+vue系统开发

链接: https://pan.baidu.com/s/1P1YpHAx9QOBPxjFZ9SAbig 提取码: u6f1