丽华设计如下算法:考虑到方案中只包含了A与B两个字母,可以用二进制的0和1来代替(0表示A,1表示B)。当全部是0时最小,此数0;当全部是1时此数最大。枚举0到最大数的每一种情况,逐一判断是否包含B相连(二进制数1相连)情况,符合条件的0、1转为A、B后输出。
根据以上算法思想,丽华使用VB程序编写了一个程序来解决这个问题。在文本框Text1中输入n的值,点击“寻找方案”按钮Command1后,在列表框List1中输出所有的方案,在标签Label3中显示方案总数。
Private Sub Command1_Click()
Dim i As Integer, j As Integer, n As Integer, t As Integer, k As Integer
Dim flag as Boolean, ans As Integer
Dim a(1 To 15) As Integer
n = Val(Text1.Text)
For i = 0 To 2^n-1
t = i
For j = 1 To n
a(j) = t Mod 2
t = t \ 2
Next j
flag = True
For k = 1 To n-1
If Then flag = False
Next k
If flag Then : ans = ans + 1
Next i
Label3.Caption = "可能方案共" + Str(ans) + "种"
End Sub
Function GetStr(x As Integer, n As Integer) As String
Dim m As Integer, i As Integer
GetStr = ""
m = x
For i = 1 To n
If m Mod 2 = 0 Then
GetStr = "A" + GetStr
Else
GetStr = "B" + GetStr
End If
Next i
End Function