热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UVa11683:激光雕刻技术解析

自1958年发明以来,激光技术已在众多领域得到广泛应用,包括电子设备、医疗手术工具、武器等。本文将探讨如何使用激光技术进行材料雕刻,并通过编程解决一个具体的激光雕刻问题。

自1958年激光技术被发明以来,它已经在诸如电子设备、外科手术工具、武器等多个领域得到了广泛的应用。

激光雕刻设备示意图

上图展示了一种用于固体材料雕刻的激光设备示意图。图中可见,激光发射器可水平向右和向左移动,且速度恒定。当激光发射器在移动过程中开启时,会从材料块上移除一层特定厚度的材料,这些材料会被激光汽化。

下图展示了激光雕刻过程的一个例子,其中包括:(a) 初始状态下的材料块,高度为5毫米,长度为8毫米;(b) 雕刻后期望达到的形状;(c) 整个雕刻过程中各层材料的去除顺序。在每个步骤中,都会移除1毫米厚的一层材料。在雕刻过程中,激光共开启了7次,每次对应于材料块的一部分。

激光雕刻过程示例

请编写一个程序,给定材料块的高度和长度以及最终形状,计算出完成雕刻所需的激光开启次数。

输入

输入包含多个测试案例。每个测试案例由两行组成。第一行包含两个整数A和C,分别表示待雕刻材料块的高度(1 ≤ A ≤ 10^4)和长度(1 ≤ C ≤ 10^4),单位为毫米。第二行包含C个整数Xi,每个整数表示沿材料长度方向位置i至i+1之间的最终高度(0 ≤ Xi ≤ A,对于0 ≤ i ≤ C−1)。假设在每一步中,激光开启时会从材料的相应部分移除1毫米厚的一层。

输入结束标志为一行仅包含两个零,中间以空格分隔。

输出

对于每个测试案例,程序应输出一行,包含一个整数,表示为了将材料雕刻成指定形状需要开启激光的总次数。

样例输入

5 8
1 2 3 2 0 3 4 5
3 3
1 0 2
4 3
4 4 1
0 0

样例输出

7
3
3

问题链接: UVa 11683: Laser Sculpture

问题简述: 本题要求根据给定的材料尺寸和目标形状,计算出完成雕刻所需的最小激光开启次数。

问题分析: 该问题属于基础类型,主要考察对输入数据的理解及简单的数学运算能力。

程序说明: 通过读取输入数据,比较相邻位置的高度差,累加所有下降的高度值即为所需激光开启次数。

参考链接: 略

题记: 在解决问题时,尽量减少不必要的内存使用。

以下是使用C++实现的解决方案:

/* UVa 11683: Laser Sculpture */
#include
using namespace std;
int main()
{
int height, length, currentHeight, previousHeight, totalTurns;
while(scanf("%d", &height) != EOF && height) {
scanf("%d", &length);
previousHeight = height;
totalTurns = 0;
for(int i = 0; i scanf("%d", ¤tHeight);
if(currentHeight totalTurns += previousHeight - currentHeight;
previousHeight = currentHeight;
}
printf("%d\n", totalTurns);
}
return 0;
}


推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • 本文探讨了如何选择一个合适的序列化版本ID(serialVersionUID),包括使用生成器还是简单的整数,以及在不同情况下应如何处理序列化版本ID。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文详细介绍如何在 Apache 中设置虚拟主机,包括基本配置和高级设置,帮助用户更好地理解和使用虚拟主机功能。 ... [详细]
  • 本文详细探讨了select和epoll两种I/O多路复用技术的内部实现原理,分析了它们在处理大量文件描述符时的性能差异,并通过具体示例代码展示了select的工作流程。 ... [详细]
  • 如何使用Maven将依赖插件一并打包进JAR文件
    本文详细介绍了在使用Maven构建项目时,如何将所需的依赖插件一同打包进最终的JAR文件中,以避免手动部署依赖库的麻烦。 ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
author-avatar
西南科技大学地质协会_927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有