算法题T2

本文最后更新于:3 个月前

绘制机器的绘笔初始位置在原点(0,0),机器启动后其绘图笔按下面规则绘制直线:
1) 尝试沿着横向正坐标轴绘制直线,直到给定的终点E。
2) 期间可以通过指令在纵坐标轴方向进行偏移,并同时绘制直线,偏移后按规则1绘制直线;指令的X offsetY,表示在横坐标轴X沿纵坐标方向偏移,offsetY为正数表示正向偏移,为负数表示负向偏移。
给定了横坐标终点值E,以及若干条绘制指令,请计算绘制的直线和横坐标轴以及X=E的直线组成图形的面积。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
let E = 10
let C: [[Int:Int]] = [
[1 : 1],
[2 : 1],
[3 : 1],
[4 : -4],
[5 : 2],
];

print("输入终点:" + String(E))

var s = 0
var offsetY = 0
for i in 0 ... C.count {
if i < C.count {
let c = C[i]
var offsetX = 0
if i == 0 {
offsetX = c.keys.first!
} else {
let lc = C[i - 1];
offsetX = c.keys.first! - lc.keys.first!
}
var y = 0
if offsetY < 0 {
y = offsetY * -1
} else {
y += offsetY
}
s += (offsetX * y)
offsetY += c.values.first!
} else {
let lc = C[i - 1];
let
offsetX = E - lc.keys.first!
var y = 0
if offsetY < 0 {
y = offsetY * -1
} else {
y += offsetY
}
s += (offsetX * y)
}
}

print("输出:" + String(s));
1
2
输入终点:10
输出:12