按照以下算法可以得到最少的分组:
(1)将第1个单词分到第1组;
(2)尝试将第2个至第n个单词分到已有的分组中:若能分到已有的分组中,则分到第一个符合条件的组;若不能分到已有的组,则分到新生成的组中。
按上述要求,编写VB程序(运行界面如图所示),功能如下:从文本框Text1中读取单词,单击“分组”按钮Command1,在列表框List1中输出具体分组情况,在标签Label1中显示最少分组的数目。
(1)按照上述算法,若有lion、tiger、wolf、cat、deer、bear等6个单词,分组后第一组分到的单词数是
(2)请在划线处填入合适的代码。
Const n=6
Dim a(1 To n)As String
Dim b(n*(n+1))As Integer’数组b分为n段,每一段的第一个元素存储该组分到的单词个数,后n个元素存储该组分到的单词位置
Private Sub Command1_Click()
Dim i As Integer,j As Integer,cnt As Integer
’读取文本框Text1中的n个单词,并存储在数组a中,代码略
’为数组b中所有元素赋初值为0,代码略
b(0)=1:b(1)=1:cnt=1
For i=2 To n
cnt=
Next i
’输出具体分组情况,代码略
Label1.Caption="最少可分:"+Str(cnt)+"组
Function group(x As Integer,m As Integer)As Integer’分组
Dim i As integer,j As Integer,t As Integer
Dim flag As Boolean
flag=False:group=0
For i=1 To m
t=(i-1)*(n+1)
For j=1 To b(t)
If mutex(a(x),a(b(t+j))=False Then Exit For
Next j
If j>b(t)Then
b(t)=b(t)+1
b(t+b(t))=x’分到己有的组
flag=True:Exit For
End If
Next i
If flag=False Then
t=m*(n+1)
b(t)=b(t)+1
group=1
End If
End Function
Function mutex(m As String,n As String)As Boolean
Dim ch_m(25)As Integer,ch_n(25)As Integer’0~25依次对应26个字母
mutex=True
’对数组ch_m、ch_n中各元素赋初值0,代码略
For i=1 To Len(m)
c=Mid(m,i,1)
ch_m(
Next i
’对单词n做与m同样的处理,处理结果保存在数组ch_n中,代码略
For i=0 to 25
If ch_m(i)*ch_n(i)=1 Then
mutex=False:Exit For
End If
Next i
End Function

同类型试题

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2


y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

