例1:某流水线上有8包口罩,每包口罩的数量和装箱安排如下表:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
数量 | 12 | 3 | 9 | 6 | 6 | 9 | 3 | 12 |
箱号(方案1) | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 |
箱号(方案2) | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 |
箱号(方案3) | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 |
在上述情况下,有3种分箱方案,方案1为最优方案。
例2:某流水线上有8包口罩,每包口罩的数量和装箱安排如下表:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
数量 | 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 |
在上述情况下,没有符合要求的装箱方案。
按照上述要求,编写一个VB程序,功能如下:窗体加载时,读取流水线上每包口罩的数量,并将结果显示在列表框List1中,点击“装箱”按钮后,在文本框Text1中输出分箱结果,若存在装箱方案,则输出最多的装箱数,否则输出“无方案”。程序界面如图所示。

(1)假如流水线上生产的每包口罩数量依次为“16,5,3,8,7,9”,按照上述装箱要求,则装箱结果为____。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Dim sum(0 To 1000) As Integer 'sum(m)存储前m包口罩的数量
Dim a(0 To 1000) As Integer
Dim n As Integer, i As Integer, pos As Integer 'n,i,pos为全局变量,i表示前i包口罩放在第1个箱子
Private Sub Form_Load()
List1.clear
'读取流水线上口罩包数n和每包口罩数,存入数组a中,并在List1中显示,代码略
End SubPrivate Sub Command1_Click()
Dim s As String
Dim tot As Integer, ans As Integer, cur As Integer
For i = 1 To n
sum(i) = sum(i - 1) + a(i)
Next i
ans = 0
For i = 1 To n
cur = i '当前分箱最后一包口罩的序号
_____
pos = i + 1
Do While pos <= n
If find(pos, n, cur) Then '寻找下一段符合方案的口罩数量和
cur = pos
tot = tot + 1
Do While sum(pos) = sum(pos + 1) '若这包口罩数量为0则直接跳过
pos = pos + 1
cur = cur + 1
Loop
Else
Exit For
End If
pos = pos + 1
Loop
If tot > 1 And ____ Then
ans = tot
Exit For
End If
Next i
If ans > 0 Then
Text1.Text = Str(ans)
Else
Text1.Text = "无方案"
End If
End Sub
Function find(L As Integer, R As Integer, k As Integer) As Boolean
Dim m As Integer, t As Integer
find = False
Do While L <= R
m = (L + R) \ 2
t = _____
If t = sum(i) Then
pos = m
find = True
Exit Function
ElseIf t < sum(i) Then
L = m + 1
Else
R = m - 1
End If
Loop
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

