小安需要在一个n*n(4<=n<=10)的房间里使用黑白两种地砖铺设房间,要求相邻的两块地砖颜色都不同。房间里会随机产生m(m<=10)根柱子,如果最后黑白两种地砖使用的数量相同,就认为可以铺满整个房间。小安将a数组元素值设置为0、1和2三种,当数组a的值为0时显示“□”,代表白地砖,为1时显示“■”,代表黑地砖,为2时显示“○”,代表柱子。最后,小安还求出了任意两根柱子之间的最大面积,单位长度为1(当两个柱子在同一行或同一列,认为面积为0,面积求法如图b所示)。
图a | 图b |
程序运行界面如图a所示。实现上述功能的VB代码如下:
Dim n As Integer, m As Integer
Dim a(1 To 100) As Integer
Dim b(1 To 10) As Integer 'b数组存储柱子位置
Dim f(3) As Integer, i As Integer 'f数组存储三种类型的个数
Private Sub Command1_Click()
n = Val(Text1.Text):m = Val(Text2.Text)
k = 0
For i = 1 To m
b(i) = Int((Rnd * n ^ 2) + 1)
a(b(i)) = 2
For j = 1 To i - 1
If b(i) = b(j) Then
①
Exit For
End If
Next j
Next i
'将房间设置为黑白两种颜色交错,白黑以0、1代替
For i = 1 To n * n
If a(i) = 0 And k = 1 Then
s = s + "■": a(i) = k
ElseIf a(i) = 0 And k = 0 Then
s = s + "□": a(i) = k
Else
s = s + "○"
f(k) = f(k) - 1
f(2) = f(2) + 1
End If
②
If i Mod n = 0 Then
List1.AddItem s
s = ""
End If
Next i
'对b数组的数值按升序进行排序,代码略
For i = 1 To m - 1
s = search(i)
If s > smax Then smax = s
Next i
'对f(0)和f(1)的相等情况进行判断,并输出最后结果,代码略
End Sub
Function search(i As Integer) As Integer
Dim x1 As Integer, x2 As Integer
Dim y1 As Integer, y2 As Integer
x1 = (b(i) - 1) \ n + 1
y1 = (b(i) - 1) Mod n + 1
For j = i + 1 To m
x2 = (b(j) - 1) \ n + 1
y2 = (b(j) - 1) Mod n + 1
If ③ Then s = 0
s = (x2 - x1) * (y2 - y1)
If s > search Then search = s
Next j
End Function