例如:图a中放映厅内座位有9排10列,第5排10个座位的等级值依次为:1,2,3,4,5,5,4,3,2,1。全部座位为空时,当前购票人数为5,推荐座位编号为5排3-7号;如图b所示已经部分选座状态下,当前购票人数为2,推荐座位编号为6排3-4号。
编写VB程序,模拟上述功能。运行程序,在列表List1中显示目前选座状态,黑点表示已选座,白点表示空位,在文本框Text1中输入购票人数后,单击“推荐”按钮Command1,在标签Label3显示当前购票人座位的推荐结果。程序运行界面如图c所示。
Const m = 9 'm 表示座位有9排
Const n = 10 'n 表示每排的座位数为10
Dim r As Integer 'r 表示当次输入的购票人数
Dim a(1 to m * n) As Integer 'a 数组存放每个座位的等级值
Dim b(1 to m * n + 1) As Integer 'b 数组保存当前各座位选座情况,选中为1,未选为 0
Private Sub Form_Load()
'从第1排开始,按座位编号从小到大顺序逐排读取座位等级值并依次存入数组a
'同上述顺序,读取选座状态存入数组元素b(1)至b(m*n)中,输出当前选座状态。代码略
End Sub
Function getsum(i As Integer, j As Integer) As Integer
'从第i排第j列开始,计算第i排中满足r个观众就座的连续空位等级值之和。
'若无法找到足够的连续空位时,则返回-1
Dim p As Integer, sum As Integer, k As Integer
sum = 0
p = j: k = (i - 1) * n + p
Do While p <= j + r - 1 And b(k) = 0
sum =
p = p + 1: k = k + 1
Loop
If p = j + r Then getsum = sum Else getsum = -1
End Function
Private Sub Command1_Click()
Dim i As Integer, j As Integer, s As String, max As Integer
Dim t As Integer, newi As Integer, newj As Integer, pos As Integer
r = Val(Text1.Text)
max = 0
For i = 1 To m
For j = 1 To n - r + 1
If max < t Then max = t: newi = i: newj = j
Next j
Next i
If max = 0 Then
Label3.Caption = "请自主选位" Else
pos = (newi - 1) * n + newj
For i =
b(i) = 1
Next i
Label3.Caption = "推荐座位编号:" & newi & "排" & newj & "-" & newj + r - 1 & "座"
End If
End Sub