每项任务有一个紧急程度,用数字表示,数字越大紧急程度越高。紧急程度最高的任务优先执行,紧急程度相同先出现先执行。若某项任务在执行过程中出现了一个紧急程度更高的任务,则正在执行的任务将被暂停,执行该紧急程度更高的任务。
编写VB程序,功能如下:程序运行时,各项任务数据按出现时刻升序显示在列表框List1中,单击“开始”按钮Command1,按照任务完成的先后顺序,在列表框List2显示每项任务的编号以及完成时刻。程序运行界面如图所示:请回答下列问题:
1号任务:时刻1出现,完成所需时长4,紧急程度1
2号任务:时刻2出现,完成所需时长2,紧急程度2
3号任务:时刻7出现,完成所需时长1,紧急程度3
则这3个任务的完成的顺序为(单选,填字母:A . 1号、2号、3号 /B . 2号、3号、1号 / C . 2号、1号、3号)。
Dim id(0 To 100) As Integer '任务编号
Dim t(0 To 100) As Integer '出现时刻
Dim L(0 To 100) As Integer '完成所需时长
Dim v(0 To 100) As Integer '紧急程度
Dim n As Integer '总任务数
Private Sub Form_Load()
'本过程读取任务编号、出现时刻、完成所需时长和紧急程度的数据分别存储在数组 id,t,L和v中,并在List1中显示,代码略
End Sub
Private Sub Command1_Click()
Dim q(0 To 100) As Integer 'q 数组按优先顺序存储已出现的任务编号
Dim k As Integer, i As Integer, j As Integer, cur As Integer
cur = 0: k = 0 'cur 记录当前时刻
For i = 1 To n
Do While k > 0 And t(i) >= cur + L(q(k)) '新的任务出现时,计算并输出已经完成的任务编号
List2.AddItem adj(2, (id(q(k)))) + adj(6, cur + L(q(k)))
cur = cur + L(q(k))
k = k - 1
Loop
If k > 0 Then L(q(k)) = '更新正在执行的任务的完成所需时长
k = k + 1
j = k
Do While v(q(j - 1)) >= v(i)
q(j) = q(j - 1)
j = j - 1
Loop
q(j) = i
Next i
Do While
List2.AddItem adj(2, id(q(k))) + adj(6, cur + L(q(k)))
cur = cur + L(q(k))
k = k - 1
Loop
End Sub
Function adj(x As Integer, v As Integer) As String
'adj可以通过添加前置空格将v转化为x位长度的字符串,便于输出对齐,代码略
End Function