有一个10*10的场地,要在场地上放入若干件正方形货物。算法描述:
⑴货物逐个尝试放入,搜索场地矩阵(从左到右,从上到下),若某块区域能放下该货物,则标记这些相应位置为货物编号,然后返回左上角检测下一货物。
⑵搜索时,若右侧剩余列小于货物边长,则跳转到下一行,若下方剩余行小于货物边长,则直接返回检测下一货物,直到所有货物检测完毕。
小武同学根据上述算法设计了VB程序。程序运行,在列表框list1降序输出货物规格,点击“存放”按钮command1,在列表框list2输出摆放完成的场地矩阵。
算法的VB程序如下,回答下列问题。
(1)
若货物4的尺寸改为4*4,其他不变,则货物9会被放在 (填数组下标)
(2)
在程序划线处填上合适代码,使程序完整
Dim
hw(1 To 9) As Integer '存储正方形货物的边长
Dim
cd(1 To 100) As Integer '场地是边长为10的正方形
Private
Sub Command2_Click()
Dim i As Integer, j As Integer, wz As
Integer, s As String
For i = 1 To 9
j = 1
Do While (10 - (j - 1) \ 10) >=
hw(i) '下方空间足够
If ① =
False Then '从当前位置开始能否放下
j = j + 1
Else
'把相关位置标记为i,并处理下一货物,代码略
End If
If
10 - (j - 1) Mod 10 < hw(i) Then ‘右侧空间不足
②
EndIf
Loop
Next i
‘在列表框list2输出整个场地放好货物之后的矩阵图,代码略
End
Sub
Function
pd(start As Integer, bc As Integer) As Boolean
Dim i As Integer, wz As Integer
pd = True: wz = start
Do While wz <= start + 11* (bc - 1) And wz
<= 100
If ③ Then
pd = False
Exit Function
ElseIf
(wz - 1) Mod 10 - (start - 1) Mod 10 = bc - 1 Then
wz =
wz + 11 - bc ‘位置转到下一行,与起点同列
Else
wz = wz + 1
End If
Loop
End
Function
Private
Sub Form_Load()
‘生成货物边长,降序显示在列表框list1,矩阵元素初始化为0,代码略
End
Sub
① ② ③
答案: 【1】49
【1】pd(j, hw(i))【2】j = ((j - 1) \ 10 + 1) * 10 + 1【3】cd(wz) <> 0