|
VBA整数删数字后最小数
请在整数n=83179254297017652中删除9个数字,使得余下的数字按原次序组成的新数最小
用msgbox提示输入整数, 输入删除数字个数
先后删除哪些数字
删除后最小
答案:12017652
本帖最后由 yorkchenshunan 于 2016-3-30 13:39 编辑
按照我的逻辑,先后删除的是3/4/5/6/8,过程如下 - Sub jisuan()
- Dim ar, n%, m As Single, p%, r%, min1%, min2%, min3%, min%, br, cr, inp$
- inp = Application.InputBox("说明:请输整数", "请输入任意整数", , , , , , 2)
- If Not IsNumeric(inp) Then
- MsgBox "输入有误"
- Exit Sub
- End If
- ReDim ar(1 To Len(inp), 1 To 2) As Integer
- For n = 1 To Len(inp)
- ar(n, 1) = n
- ar(n, 2) = Mid(inp, n, 1)
- Next n
- Do
- m = Application.InputBox("说明:请输入1-" & Len(inp) - 1 & "之间的整数", "请输入删除数字个数", , , , , , 1)
- Loop Until Int(m) = m And m >= 1 And m <= 16
- min = 1
- min3 = 1
- ReDim br(1 To Len(inp) - m)
- ReDim cr(1 To m)
- For p = 1 To Len(inp) - m
- min2 = 10
- For r = min To p + m
- If ar(r, 2) < min2 Then
- min1 = ar(r, 1)
- min2 = ar(r, 2)
- End If
- Next r
- If min1 > min Then
- For r = min To min1 - 1
- cr(min3) = ar(r, 2)
- min3 = min3 + 1
- Next r
- End If
- min = min1 + 1
- br(p) = min2
- Next p
- If min3 <= m Then
- For p = 1 To m + 1 - min3
- cr(m + 1 - p) = ar(UBound(ar) - p + 1, 2)
- Next p
- End If
- MsgBox "先后删除数字:" & Join(cr, ",") & Chr(10) & "答案:" & Join(br, "")
- End Sub
复制代码
|
|