仓库管理员对每一件物品都进行了编码,并按升序排列,每个用户在领取物品时需要提供物品的后几位编码,如果用户提供的编码在仓库中有多件物品符合,则给他编码较小的物品。如果仓库中没有符合用户需要的物品,
则输出
none。请你编程帮管理员找出每一位用户应该领取的物品编码,物品不能被重复领取。例如,仓库有5 件物品,分别为134,1123,1234, 2112,5123
,有 3 个用户提出领取物品的需求:
2233456212,第1个数就是第1个用户要求的物品编码后几位的长度(1到9之间),例如是2,则向后读取2位数,23就是第一个用户要求的编码尾号,依次类推,第2个用户要求后3位编码为456,第3个用户要求后2位编码为12。则他们应该领取的物品为
1123,none,2112。
(1)
根据题目中的物品编码,如果用户的需求数据是:143123223,领取的物品编码分别是。
(2)
实现上述功能的程序如下,请在划线处填入合适的代码。
Const
num = 5
Dim a(1 To 10) As String '物品编码
Dim s As String, req(1 To 10) As Integer '每位用户需求的后几位编码
Dim n As Integer '用户数
Dim
g(1 To 10) As String
Dim b(1 To 10) As Integer '每位用户需求的后几位编码长度
Dim flag(1 To 10) As Boolean '标记物品是否被领取
Private
Sub Form_Load()
'仓库物品编码数据初始化,并在List1中列举,代码略
End Sub
Private Sub Command1_Click()
s = Text1.Text
k = 1: i = 1: n = 0
Do While i <= Len(s)
t = Val(Mid(s, i, 1))
n = n + 1
b(n) = t
req(n) = Val(Mid(s, i + 1, t))
Loop
For i = 1 To n
List2.AddItem g(i)
Next i
End Sub
Function search(need As
Integer, needlen As Integer) As String
j = 1
For j = 1 To num
IfAnd flag(j) = False Then Exit
For Next
If j > num Then search = "none"
Else
flag(j) = True search = a(j)
End If
End Function
答案: 【1】134 1123 5123
【1】i = i + t + 1【2】g(i) = search(req(i), b(i))【3】need = Val(Mid(a(j), Len(a(j)) - needlen + 1, needlen))