华为OD机试真题---绘图机器(计算面积)
题目描述
绘图机器的绘图笔初始位置在原点(0,0),机器启动后按照以下规则绘制直线:
- 尝试沿着横线坐标正向绘制直线直到给定的终点E。
- 期间可以通过指令在纵坐标轴方向进行偏移,offsetY为正数表示正向偏移,为负数表示负向偏移。
给定了横坐标终点值E以及若干条绘制指令,请计算绘制的直线和横坐标轴以及X=E的直线组成图形的面积。
输入描述
首行为两个整数N和E,表示有N条指令,机器运行的横坐标终点值E。
接下来N行,每行两个整数表示一条绘制指令X offsetY,用例保证横坐标X以递增排序的方式出现,且不会出现相同横坐标X。
取值范围:
- 0 < N <= 10000
- 0 <= X <= E <= 20000
- -10000 <= offsetY <= 10000
输出描述
一个整数,表示计算得到的面积,用例保证结果范围在0到4294967295之内。
解题思路
- 初始化变量:包括总面积、上一个点的横坐标和纵坐标。
- 遍历指令:对于每一条指令,计算当前段与X轴围成的面积,并累加到总面积中。
- 面积 = (当前X - 上一个X) * |上一个Y|(因为上一个Y到当前Y之间是一个矩形或梯形的高,而宽度是当前X与上一个X的差)
- 注意,这里使用了绝对值来计算高度,因为面积总是正的。
- 处理最后一个段:如果最后一个点的X坐标小于E,则需要计算最后一个段与X=E的直线围成的面积。
- 输出结果:输出计算得到的总面积。
Java实现示例
import java.util.Scanner;public class DrawingMachineArea {public static void main(String[] args) {try (Scanner scanner = new Scanner(System.in)) {// 读取N和Eint N = scanner.nextInt();int E = scanner.nextInt();// 输入验证if (N <= 0 || E <= 0) {throw new IllegalArgumentException("N 和 E 必须大于零");}// 初始化变量int lastX = 0; // 上一个点的横坐标int lastY = 0; // 上一个点的纵坐标long totalArea = 0; // 总面积,使用long类型以防止溢出// 读取指令并计算面积for (int i = 0; i < N; i++) {int currentX = scanner.nextInt();int offsetY = scanner.nextInt();// 输入验证if (currentX < 0 || currentX > E) {throw new IllegalArgumentException("currentX 必须在 [0, E] 范围内");}int currentY = lastY + offsetY; // 计算当前Y坐标// 计算当前段与X轴围成的面积int width = currentX - lastX;int height = Math.abs(currentY - lastY); // 使用绝对值计算高度// 溢出检测if (width > Integer.MAX_VALUE / height) {throw new ArithmeticException("计算面积时可能发生溢出");}long segmentArea = (long)width * height; // 使用long类型进行计算以防止溢出// 累加面积到总面积中totalArea += segmentArea;// 更新上一个点的坐标lastX = currentX;lastY = currentY;}// 计算最后一个段与X=E的直线围成的面积(如果有的话)if (lastX < E) {int width = E - lastX;long segmentArea = (long)width * Math.abs(lastY); // 使用long类型进行计算以防止溢出// 溢出检测if (totalArea > Long.MAX_VALUE - segmentArea) {throw new ArithmeticException("累加总面积时可能发生溢出");}totalArea += segmentArea;}// 输出结果System.out.println(totalArea);} catch (Exception e) {System.err.println("发生错误: " + e.getMessage());}
}}
注意事项
- 输入处理:确保输入的格式正确,并按照题目描述的取值范围进行验证(虽然题目要求不需要显式验证,但在实际编程中应该考虑这一点)。
- 面积计算:在计算面积时,使用长整型(
long)来防止溢出。这是因为当N、E和offsetY的取值范围较大时,单个段的面积可能会超过int类型的最大值。 - 最后一个段:不要忘记计算最后一个段与X=E的直线围成的面积(如果最后一个点的X坐标小于E)。
- 输出格式:输出一个整数表示计算得到的面积,确保结果在题目给定的范围内内。
为了提供一个运行示例,我将模拟一些输入数据,并展示如何使用上述Java代码来计算绘图机器绘制的直线与坐标轴围成的面积。由于我们不能直接在文本环境中运行代码,我将通过描述输入数据和预期输出来模拟这个过程。
输入数据示例
假设我们有以下输入数据:
4 10
2 3
4 -1
7 2
9 4
这表示:
- 有4条指令(N=4)。
- 横坐标终点值E=10。
- 指令依次为:
- 在X=2处,Y方向偏移+3(到达点(2,3))。
- 在X=4处,Y方向偏移-1(到达点(4,2))。
- 在X=7处,Y方向偏移+2(到达点(7,4))。
- 在X=9处,Y方向偏移+4(到达点(9,8))。
预期输出
我们需要计算由这些点和X=10的直线围成的面积。通过手动计算或运行代码,我们可以得到以下面积:
- 从(0,0)到(2,3)的面积:2 * 3 = 6
- 从(2,3)到(4,2)的面积:2 * 1 = 2(注意高度是|3-2|=1)
- 从(4,2)到(7,4)的面积:3 * 2 = 6
- 从(7,4)到(9,8)的面积:2 * 4 = 8
- 从(9,8)到(10,8)的面积(与X=10相交):1 * 8 = 8
将这些面积相加,我们得到总面积:6 + 2 + 6 + 8 + 8 = 30。
相关文章:
华为OD机试真题---绘图机器(计算面积)
题目描述 绘图机器的绘图笔初始位置在原点(0,0),机器启动后按照以下规则绘制直线: 尝试沿着横线坐标正向绘制直线直到给定的终点E。期间可以通过指令在纵坐标轴方向进行偏移,offsetY为正数表示正向偏移,为负数表示负向偏移。 给…...
HarmonyOs 查看官方文档使用弹窗
1. 学会查看官方文档 HarmonyOS跟上网上的视频学习一段时间后,基本也就入门了,但是有一些操作网上没有找到合适教学的视频,这时,大家就需要养成参考官方文档的习惯了,因为官方的开发文档是我们学习深度任何一门语言或…...
uniapp+Android智慧居家养老服务平台 0fjae微信小程序
目录 项目介绍支持以下技术栈:具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 老年人 登…...
在一台电脑上实现网页与exe程序使用udp通信
要在同一台电脑上实现网页(前端)与 EXE 程序(后端)通过 UDP 通信,可以使用以下步骤。前端可以使用 JavaScript 通过 WebSocket 与自定义服务器进行通信,该服务器通过 UDP 发送和接收数据,再与 E…...
基于Java的GeoTools对Shapefile文件属性信息深度解析
目录 前言 一、Shapefile的属性列表信息 1、属性表格信息 2、属性表格包含的要素 二、GeoTools对属性表格的解析 1、常规解析方法 2、基于dbf文件的属性信息读取 三、总结 前言 ESRI Shapefile(shp),或简称shapefile,是美…...
付费计量系统实体和接口(1)
13.System entities and interfaces 系统实体和接口 See also Clause 4 for a discussion on general concepts and Clause 5 for generic entity model. 参见条目 4 讨论总体概念、条目 5 通用实体模型。 An entity specification should specify the embodied functions and …...
网易博客旧文----bacnet学习系列之四----VTS的初步使用
bacnet学习系列之四----VTS的初步使用 2014-02-07 13:32:28| 分类: BACnet | 标签: |举报 |字号大中小 订阅 这是一个测试用 的工具,而且是开放源码的,下载地址为:VTS下载官网 也可以从我的网盘下载 VTS下载 我用的是…...
SpringIoC容器的初识
一、SpringIoC容器的介绍 Spring IoC 容器,负责实例化、配置和组装 bean(组件)。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这…...
队列的实现与讲解
一.概念与结构 1.概念 只允许在⼀端进行插⼊数据操作,在另⼀端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进⾏插⼊操作的⼀端称为队尾 出队列:进⾏删除操作的⼀端称为队头 注意&…...
hbuilderx+uniapp+Android健身房管理系统 微信小程序z488g
目录 项目介绍支持以下技术栈:具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户功能…...
自动驾驶-参考线生成
为什么要进行参考线生成? apollo在routing模块,已经得到的全局路径,但是其不能直接作为局部路径规划的参考线,这是因为: routing给出的全局路径过长;routing是基于高精地图给出的路径,高精地图…...
厂商资源分享网站
新华三(H3C)是一家中国知名的网络设备供应商,提供网络设备、网络解决方案和云计算服务。公司成立于2003年,是华为公司和惠普公司合资的企业,总部位于中国深圳。 华为(Huawei)是一家全球知名的电…...
【ONE·Web || HTML】
总言 主要内容:HTML基本知识入门,主要介绍了常见的一些标签使用,以及简单案例演示。 文章目录 总言0、前置说明1、认识HTML1.1、是什么1.2、初识 HTML 标签、HTML 文件基本结构1.2.1、相关说明1.2.2、vscode如何快速生成代码 2、HT…...
MongoDB的安装与增删改查基本操作
MongoDB是一种非关系型数据库,是NoSQL语言,但是又是最接近关系型数据库的。内部存储不是表结构,但是可以对数据进行表结构的操作。 一、安装 在官网:Download MongoDB Community Server | MongoDB下载系统对应的版本进行安装即可 二、编辑器 在安装MongoDB后会自带一个编…...
Python水循环标准化对比算法实现
🎯要点 算法区分不同水循环数据类型:地下水、河水、降水、气温和其他,并使用相应标准化降水指数、标准化地下水指数、标准化河流水位指数和标准化降水蒸散指数。绘制和计算特定的时间序列比较统计学相关性。使用相关矩阵可视化集水区和显示空…...
【TypeScript】知识点梳理(一)
#国庆快乐!来点干货~ # #项目中团队总结生产问题,40%是类型相关问题,可见TS的重要性与向好趋势# TS是JS的超集 类型 Number、String、Boolean 首字母大小写,类型有区别,譬如: string是基元(原始…...
DMA方式在执行中断处理程序时不中断现行程序吗
DMA方式在执行中断处理程序时会中断现行程序,但DMA数据传输过程本身不中断现行程序。以下是对DMA方式及其中断处理程序的详细解释: DMA方式的基本特点 DMA(Direct Memory Access,直接存储器存取)方式是一种由硬件直接…...
Redis:string类型
Redis:string类型 string命令设置与读取SETGETMSETMGET 数字操作INCRINCRBYDECRDECRBYINCRBYFLOAT 字符串操作APPENDSTRLENGETRANGESETRANGE 内部编码intembstrraw 在Redis中,字符串string存储的是二进制,以byte为单位,输入的二进…...
【C++ STL】手撕vector,深入理解vector的底层
vector的模拟实现 前言一.默认成员函数1.1常用的构造函数1.1.1默认构造函数1.1.2 n个 val值的构造函数1.1.3 迭代器区间构造1.1.4 initializer_list 的构造 1.2析构函数1.3拷贝构造函数1.4赋值运算符重载 二.元素的插入,删除,查找操作2.1 operator[]重载函数2.2 push_back函数:…...
【Android】CarWatchDog I/O监控服务
Android Car WatchDog I/O监控服务 背景: 某基于Android 13的车载系统。 某天长时间测试一款3方(非SystemApp)时,该款应用偶发闪退现象。 通过日志分析,发现应用被系统的 Car WatchDog(喂狗服务ÿ…...
从芯片设计到产线测试:深入浅出聊聊DFT中的SCAN链设计与JTAG标准(含IEEE 1149.1)
从芯片设计到产线测试:深入浅出聊聊DFT中的SCAN链设计与JTAG标准(含IEEE 1149.1) 在芯片设计领域,可测试性设计(DFT)早已从"锦上添花"变成了"不可或缺"的核心环节。想象一下࿰…...
Python高效开发技巧汇总
这是一篇关于Python开发的技术文章示例内容,可以替换为真实文章内容。...
深入解析RS485接口:从硬件设计到工业应用
1. RS485接口基础解析 第一次接触RS485时,我也被它复杂的电气特性搞得一头雾水。直到在工厂里亲眼看到它如何稳定地穿过嘈杂的电机区域传输数据,才真正理解这个老牌工业接口的魅力。RS485本质上是一种差分信号传输标准,采用双绞线进行平衡传…...
OpenProject:构建高效团队协作的终极开源项目管理平台
OpenProject:构建高效团队协作的终极开源项目管理平台 【免费下载链接】openproject OpenProject is the leading open source project management software. 项目地址: https://gitcode.com/GitHub_Trending/op/openproject OpenProject 是一款领先的开源项…...
保姆级教程:用Proteus 8.13和STM32F103C8T6复刻一个烟雾报警器仿真(附源码调试心得)
从零到一:Proteus与STM32烟雾报警器仿真全流程实战指南 第一次打开Proteus时,那个蓝色界面和密密麻麻的元件库让我既兴奋又茫然。作为一个刚接触嵌入式仿真的电子爱好者,我原本以为有了开源文件和代码就能轻松复现一个烟雾报警器仿真项目&…...
Android TTS开发避坑指南:为什么你的Google语音引擎播不出中文?从初始化到语音包管理的完整解决方案
Android TTS开发实战:解决Google语音引擎中文播报的7个关键问题 在移动应用开发中,文字转语音(TTS)功能正变得越来越重要。从无障碍辅助功能到语音导航、有声阅读,TTS技术为应用增添了更丰富的交互维度。然而,许多Android开发者在…...
Nanbeige4.1-3B惊艳效果:同一硬件下对比Phi-3-mini,Nanbeige长文本保持率+35%
Nanbeige4.1-3B惊艳效果:同一硬件下对比Phi-3-mini,Nanbeige长文本保持率35% 最近,一个只有30亿参数的小模型在开发者圈子里悄悄火了起来。它不是那种动辄千亿参数、需要顶级显卡才能跑的“巨无霸”,而是一个在普通硬件上就能流畅…...
从ONNX到TPU:跨框架模型部署的编译器避坑指南(2023最新版)
从ONNX到TPU:跨框架模型部署的编译器避坑指南(2023最新版) 当ResNet模型在PyTorch中达到99%的测试准确率时,真正的挑战才刚刚开始——如何让这个模型在边缘设备的TPU芯片上高效运行?这个问题困扰着85%的AI工程师。本文…...
颠覆式突破:多模态模型的3大技术跃迁与跨模态理解革命
颠覆式突破:多模态模型的3大技术跃迁与跨模态理解革命 【免费下载链接】Emu3 Next-Token Prediction is All You Need 项目地址: https://gitcode.com/gh_mirrors/em/Emu3 多模态模型作为人工智能领域的前沿方向,正在深刻改变机器理解世界的方式。…...
什么是哈希算法?(大白话+原理+应用,一次讲透)
文章目录一、一句话定义二、用生活例子秒懂对应到代码里:三、哈希算法的核心特性(面试必背)四、为什么 HashSet.contains() 是 O(1)?(结合哈希原理)五、哈希算法的常见应用(你日常都在用&#x…...
