另外为了公平,学校决定统一定价,使得最终价格能够让最多对学生成功进行交易。若有多个价格满足条件,则取满足条件的最高价。请你帮助校方完善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所示。
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