当前位置: 高中信息技术 / 综合题
  • 1. (2021高三上·慈溪月考) 跳蚤市场:为了筹集善款,学校组织了跳蚤市场活动。有n个学生打算卖出某种物品,其中第i个人希望以不低于a(i)的价格卖出:另有m个学生打算买入这种物品,其中第i个人希望以不高于b(i)的价格买入。如果物品的价格不低于卖方的最低价格且不高于买方的最高价格 , 则交易成功,否则交易失败。

    另外为了公平,学校决定统一定价,使得最终价格能够让最多对学生成功进行交易。若有多个价格满足条件,则取满足条件的最高价。请你帮助校方完善VB程序,编程计算这批物品的最终定价。

    例如,有6个学生打算卖出物品,他们的预期价格如图1所示。

    卖方编号

    1

    2

    3

    4

    5

    6

    预期价格

    30

    32

    31

    33

    29

    35

    图1

    另一有6个学生打算买入物品,他们的预期价格如图2所示。

    买方编号

    1

    2

    3

    4

    5

    6

    预期价格

    34

    31

    29

    32

    33

    31

    图2

    若分别以31元或32元的价格成交,都有3对学生交易成功,故最终定价为32元。

    程序运行时,从外部数据库中输入买卖双方价格并显示到列表框List1和List2中,单击命令按钮Command1进行计算,并将最终的计算结果输出到标签Label3中,程序运行界面如图3所示。

    1. (1) 若图2中的买家1退出了交易,不再卖出物品,则最终定价为元。
    2. (2) VB代码实现如下,请在划线处填入合适的代码。

      Dim n As Integer, m As Integer

      Dim a(1 To 20) As Integer, b(1 To 20) As Integer

      Private Sub Form_ Load()

          '读取卖家人数n以及最低卖出价格,存入数组元素a(1)到a(n)中;

          '读取买家人数m以及最高买入价格,存入数组元素b(1)到b(m)中;

          '代码略

      End Sub

      Private Sub Command1_Click()

          Dim i As Integer, L As Integer, R As Integer

          Dim ml As Integer, m2 As Integer, sI As Integer, s2 As Integer

          Dim price1 As Integer, price2 As Integer

          Dim tot1 As Integer, tot2 As Integer

          Dim mini As Integer, maxi As Integer

          mini = a(1): maxi =            ' mini 和maxi分别为可交易的最低价和最高价

          For i=2 To n

              If mini > a(i) Then mini = a(i)

          Next i

          For i=2 To m

              If maxi < b(i) Then maxi = b(i)

          Next i

          L=mini:R=maxi

          Do While L<R

              s1 =0:s2= 0

              m1=(L+R+1)\2

              For i=1 To n

                  If a(i)<=m1 Then s1=s1+1

              Next i

              For i=1 To m

                  If b(i)>=m1 Then s2=s2+1

              Next i

              If s1>s2 Then  Else L=m1

          Loop

          price1=L: tot1 = s1       'price1和tot1分别为价格和交易人数

          L=mini:R=maxi

          Do While L<R

              s1 =0:s2=0

              m2=(L+R)\2

              For i =1 To n

                  If a(i) <= m2 Then s1=s1 + 1

              Next i

              For i=1 To m

                  If b(i) >= m2 Then s2=s2+1

              Next i

              If s1<s2 Then L=m2+1 Else R=m2

          Loop

          price2 = L: tot2 = s2     ' price2和tot2分别为价格和交易人数

          If  Then

              Label3.Caption ="最终定价为" + Str(price1) + "元"

          End If

      End Sub

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