作者:西南科技大学地质协会_927 | 来源:互联网 | 2024-11-24 09:58
自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;
}