题目

某手机APP为电影观众选座提供了程序推荐和自主选位功能。当观众购票选择程序推荐时,程序根据电影放映厅内每个座位的优先等级(用一个正整数表示其等级值,如图a所示),自第1排1号座开始,按自左向右逐排的顺序查找满足本次购票人数r的最优空位区(最优空位区是指从某个座位开始的同排连续的r个空位,且其等级值之和最高,若有多个最优空位区,则推荐最先找到的)。若找到,则显示出推荐的座位编号;若找不到,则提示自主选位。 例如:图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所示。 (1) 如图a所示,全部座位为空时,第1次购票人数为4人,按程序推荐座位选座,座位等级值之和为 。 (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。 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 答案: 【1】18 【1】sum + a(k) 或 sum + a((i - 1) * n + p)【2】t = getsum(i, j)【3】pos To pos + r - 1 或 pos + r - 1 To pos Step -1
信息技术 试题推荐
最近更新