某影厅共12排,每排10座。座位编号以排号+座号来命名,如第10排3座,编号命名为103。该影厅的最佳观影区为方框内的座位,即第5排3座~第10排8座的矩形位置。0表示该座位可选,非0表示已售(1表示系统推荐,2表示手工选择) 座位推荐算法:
1)只推荐最佳观影区的座位,从前往后,优先选择最中间的位置,若找到最中间位置,则推荐,否则继续寻找下一排,以此类推;
2)购票数为1时,推荐单个靠中间的位置,大于1时,只推荐连续的座位;
3)若在最佳观影区内未找到可以推荐的座位时,系统将提示手工选择。编写VB程序,模拟电影院选座。在文本框Text1中输入购票数,单击“选座”按钮Command1,在标签Labe12中显示机选座位。程序运行界面如图所示。
(1)
该影厅空座情况不变如上图所示,若购票数由2改为1,则推荐的座位编号为。
(2)
实现上述功能的VB程序如下,请在划线处填写合适的代码。
ConstC=10:ConstR=12
'每排10座,共12排
Dim zw(1 To C * R) As Integer, kzw(1 To C * R) As Integer '座位,空座位
Private Sub Form_ Load ()
'读取影厅座位数据存入数组zw,并将座位信息显示在列表框list1中,代码略
End Sub
Private Sub Command1_Click ()
Dim i As Integer, j As Integer, k As Integer
Dim x As Integer, min As Integer, start As Integer
Dim m As Integer, n As Integer, ans As String
m = Val (Text1.Text) '购票数,确保数值在座位数以内
n=0 '空座位的个数
For i=5 To 10 '统计最佳观影区中的空座位编号
For j=3 To 8
If
zw((i-1)*C+j)= 0 Then
n=n+1
kzw(n) =
End
If
Next j
Next i
min = C: start=0:
k=1
Do While k+m-1<= n
If
kzw(k) + m-1= kzw(k +m- 1) Then
x=Abs(C\2-(kzw(k)+kzw(k+m-1))\2 Mod C)
If x < min Then
min=x
start = k '记录满足座位条件的起始空位号
If min=0 Then Exit Do 'Exit Do表示退出循环
End If
End If
Loop
ans =””
If start = 0 Then
ans = "未能推荐座位,请手工选座"
Else
For
i = kzw(start) To
'CStr函数把表达式转换为字符串,不产生前置空格
ans = ans + "第"+ CStr(i \C+ 1) +"排"+ CStr(i ModC) +"座"
Next i
End If
Label2.Caption = ans
End Sub
答案: 【1】75
【1】(i - 1) * C + j【2】k = k + 1【3】kzw(start) + m – 1 或 kzw(start + m - 1)