例如能力值分别为“1,2,2,3,4,5”进行分组,分成两种方案:
方案一,可以分(2)和(1,2,3,4,5)两组:
方案二,可以分(1,2)和(2,3,4,5)两组:
可见,方案二分组中人数最少的组人数更多,因此该方案更优。根据上述要求编写VB程序,程序运行界面如16题图所示。
Private Sub Command1 Click()
Dim a(1000) As Integer, q(1000) As Integer
Dim top As Integer '表示分组数量
Dim sum(000 As Integer '存储每组的人数
‘初始化得到n位同学的能力值,分别存储在a(1)-a(n)中,并升序排序,代码略
top=0
For k= 1To n
i=0:j =top
Do While i< j
m=(i+j+1)\2
If q(m)<=a(k) Then
Else
j=m-1
End If
Loop
If q(i) <> a(k) Then
top=top+1
sum(top) = 1
Else
sum(i) = sum(i) + 1
End If
Next k
ans = sum(1)
For k= 2 To top
If sum(k) < ans Then ans = sum(k)
Next k
Label1. Caption = “人数最少的一组人数最多为” + Str (ans)
End Sub