当前位置: 高中信息技术 / 综合题
  • 1. (2021·绍兴模拟) 某手机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. (1) 如图a所示,全部座位为空时,第1次购票人数为4人,按程序推荐座位选座,座位等级值之和为 。
    2. (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

微信扫码预览、分享更方便