1. 跳蚤市场:为了筹集善款,学校组织了跳蚤市场活动。有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) 若图2中的买家1退出了交易,不再卖出物品,则最终定价为元。
(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

【考点】
查找算法及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
2. 小明在玩一个数字游戏,给定一个n位正整数(n<=20),根据设定的保留位数,删除k个数字,剩下的数字按原次序组成一个最大的新数。例如原数36351328,删除5个数,最大数为658。算法如下:先确定最高位的数字,在第1位至最后2位数字前的363513中找到最大的数6,从而确定最高位是6,再确定次高位的数字,从6后面的数开始到最后1位数字前的35132中找到最大数5,确定次高位是5,依次找下去得到最大新数。他设计了一个VB程序来进行验证,在文本框Text1中输入一个n位正整数,在文本框Text2中输入删除位数k,点击“确定”按钮,在文本框Text3中输出保留的最大新数。程序运行界面如图所示。

(1) 如果输入的原数是3638132,删除3位数字,则输出的新数是
(2) 实现上述功能的VB代码如下,请在划线处填入合适代码。

Private Sub Command1_Click()

Dim a(1 To 20) As String

Dim ys As String, xs As String     ‘s记录最大的新数

Dim k As Integer, h As Integer, n As Integer

Dim i As Integer, j As Integer

Dim F As Boolean

xs =“”

ys = Text1.Text

n = Len(ys)

k = Val( Text2.Text)

F = True

If ys =“”Or n > 20 Or k = 0 Or k > n Then

  Label4.Caption = “输入的原数或保留位数不符,请重输!”

  F = False

End If

For i = 1 To n

 

  If a(i) < “0” Or a(i) > “9” Then

Label4.Caption =“输入的原数不是数字,请重输!”

Text1.Text = “”

F = False

  End If

Next i

If F = True Then

  h = 1

  For i = 1 To n-k

For j = h To

  If a(j) > a(h) Then h = j

Next j

h = h + 1

  Next i

  Text3.Text = xs

End If

End Sub

综合题 困难