2)下靠,例如退的房间号为5,则原来登记的3条记录变成(1 2), (5 4), (10 1);
3)上下不靠,例如退的房间号为4,则登记的记录数变成4条(1 2) ,(4 1), (6 3),(10 1); 4)上下靠,例如退的房间号为9,则登记的记录数变成2条(1,2),(6,5); 小王依据上述描述设计了如下VB程序。请回答下列问题:
(1)当登记的记录有3条,分别为(1,4),(6,2),(10,3),现在某旅客退掉5号房间,则登记的记录变成_______________________________ (2)请在划线处填入合适的代码。
Const n = 5000
Dim a(0 To n) As Integer 'a(i)保存第i条记录的开始房间号 Dim b(0 To n) As Integer ' b(i)保存第i条记录的房间数 Dim c As Integer, k As Integer, sp As Integer 'k为原始记录数
'读取原始k条记录的数据,依次存入a(1),b(1),a(2),b(2)…a(k),b(k),代码略 '为了程序处理方便,虚设了下面2条记录
a(0) = 0 : b(0) = 0 : sp = k + 1 :a(sp) = 10000 : b(sp) = 0 Private Sub Command1_Click() Dim i As Integer
c = Val(Text1.Text) 'c为退掉的房间号 i = 1
Do While a(i) < c '查找房间c,应该登记在某位置 i = i + 1 Loop i = i - 1
'下面为处理退房登记问题 If a(i) + b(i) = c Then
If __________ Then '第4种情况,上下靠 b(i) = b(i) + 1 + b(i + 1) For j = i + 1 To sp - 1
a(j) = a(j + 1) : b(j) = b(j + 1) Next j sp = sp - 1
Else '第1种情况,上靠
11
b(i) = b(i) + 1 End If
ElseIf c + 1 = a(i + 1) Then '第2种情况,下靠 a(i + 1) = c : b(i + 1) = b(i + 1) + 1
Else '第3种情况,上下不靠 For j =_____________________ a(j) = a(j - 1) : b(j) = b(j - 1) Next j
a(i + 1) = c : b(i + 1) = 1 : sp = sp + 1 End If
‘下面为输出登记的记录,不包括虚设的两条记录 For i =1 to _______
List3.AddItem \第\记录(\,\Next i End Sub
12