Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5312|回复: 26

[已解决]VBA整数删数字后最小数

[复制链接]
发表于 2016-3-29 17:12 | 显示全部楼层 |阅读模式
VBA整数删数字后最小数

请在整数n=83179254297017652中删除9个数字,使得余下的数字按原次序组成的新数最小

用msgbox提示输入整数,  输入删除数字个数

先后删除哪些数字

删除后最小      


答案:12017652



最佳答案
2016-3-30 11:06
本帖最后由 yorkchenshunan 于 2016-3-30 13:39 编辑

按照我的逻辑,先后删除的是3/4/5/6/8,过程如下
  1. Sub jisuan()
  2.     Dim ar, n%, m As Single, p%, r%, min1%, min2%, min3%, min%, br, cr, inp$
  3.         inp = Application.InputBox("说明:请输整数", "请输入任意整数", , , , , , 2)
  4.     If Not IsNumeric(inp) Then
  5.         MsgBox "输入有误"
  6.         Exit Sub
  7.     End If
  8.     ReDim ar(1 To Len(inp), 1 To 2) As Integer
  9.     For n = 1 To Len(inp)
  10.         ar(n, 1) = n
  11.         ar(n, 2) = Mid(inp, n, 1)
  12.     Next n
  13.     Do
  14.         m = Application.InputBox("说明:请输入1-" & Len(inp) - 1 & "之间的整数", "请输入删除数字个数", , , , , , 1)
  15.     Loop Until Int(m) = m And m >= 1 And m <= 16
  16.     min = 1
  17.     min3 = 1
  18.     ReDim br(1 To Len(inp) - m)
  19.     ReDim cr(1 To m)
  20.     For p = 1 To Len(inp) - m
  21.         min2 = 10
  22.         For r = min To p + m
  23.             If ar(r, 2) < min2 Then
  24.                 min1 = ar(r, 1)
  25.                 min2 = ar(r, 2)
  26.             End If
  27.         Next r
  28.         If min1 > min Then
  29.             For r = min To min1 - 1
  30.                 cr(min3) = ar(r, 2)
  31.                 min3 = min3 + 1
  32.             Next r
  33.         End If
  34.         min = min1 + 1
  35.         br(p) = min2
  36.     Next p
  37.     If min3 <= m Then
  38.         For p = 1 To m + 1 - min3
  39.             cr(m + 1 - p) = ar(UBound(ar) - p + 1, 2)
  40.         Next p
  41.     End If
  42.     MsgBox "先后删除数字:" & Join(cr, ",") & Chr(10) & "答案:" & Join(br, "")
  43.     End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-3-29 18:53 | 显示全部楼层
  1. Sub jisuan()
  2. Dim ar(1 To 17, 1 To 2) As Integer, n%, m As Single, p%, r%, min1%, min2%, min%, br
  3. For n = 1 To 17
  4.     ar(n, 1) = n
  5.     ar(n, 2) = Mid("83179254297017652", n, 1)
  6. Next n
  7. Do
  8.     m = Application.InputBox("说明:请输入1-16之间的整数", "请输入删除数字个数", , , , , , 1)
  9. Loop Until Int(m) = m And m >= 1 And m <= 16
  10. min = 2
  11. ReDim br(1 To 17 - m)
  12. For p = 1 To 17 - m
  13.     min2 = 9
  14.     For r = min To p + m
  15.         If ar(r, 2) < min2 Then
  16.             min1 = ar(r, 1)
  17.             min2 = ar(r, 2)
  18.         End If
  19.     Next r
  20.     min = min1 + 1
  21.     br(p) = min2
  22. Next p
  23. MsgBox "答案:" & Join(br, "")
  24. End Sub
复制代码

评分

参与人数 1 +9 收起 理由
vbyou127 + 9 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-3-29 18:59 | 显示全部楼层
yorkchenshunan 发表于 2016-3-29 18:53



怎么不行啊

回复

使用道具 举报

发表于 2016-3-29 19:11 | 显示全部楼层
请描述如何不行?我的电脑上是可以的。
回复

使用道具 举报

 楼主| 发表于 2016-3-29 21:16 | 显示全部楼层
yorkchenshunan 发表于 2016-3-29 19:11
请描述如何不行?我的电脑上是可以的。

无法输入这个数83179254297017652
回复

使用道具 举报

发表于 2016-3-29 21:42 | 显示全部楼层
你并没有要求这个数也要输入啊?
回复

使用道具 举报

发表于 2016-3-29 21:49 | 显示全部楼层
本帖最后由 yorkchenshunan 于 2016-3-30 08:35 编辑
  1.     Sub jisuan()
  2.     Dim ar, n%, m As Single, p%, r%, min1%, min2%, min%, br, inp$
  3.         inp = Application.InputBox("说明:请输整数", "请输入任意整数", , , , , , 2)
  4.     If Not IsNumeric(inp) Then
  5.         MsgBox "输入有误"
  6.         Exit Sub
  7.     End If
  8.    
  9.     ReDim ar(1 To Len(inp), 1 To 2) As Integer
  10.     For n = 1 To Len(inp)
  11.         ar(n, 1) = n
  12.         ar(n, 2) = Mid(inp, n, 1)
  13.     Next n
  14.     Do
  15.         m = Application.InputBox("说明:请输入1-" & Len(inp) - 1 & "之间的整数", "请输入删除数字个数", , , , , , 1)
  16.     Loop Until Int(m) = m And m >= 1 And m <= 16
  17.     min = 1
  18.     ReDim br(1 To Len(inp) - m)
  19.     For p = 1 To Len(inp) - m
  20.         min2 = 9
  21.         For r = min To p + m
  22.             If ar(r, 2) < min2 Then
  23.                 min1 = ar(r, 1)
  24.                 min2 = ar(r, 2)
  25.             End If
  26.         Next r
  27.         min = min1 + 1
  28.         br(p) = min2
  29.     Next p
  30.     MsgBox "答案:" & Join(br, "")
  31.     End Sub
复制代码

评分

参与人数 1 +9 收起 理由
vbyou127 + 9 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-3-29 22:00 | 显示全部楼层
yorkchenshunan 发表于 2016-3-29 21:49

输入1至16有何用,一定要输入多位大数83179254297017652
回复

使用道具 举报

发表于 2016-3-30 08:35 | 显示全部楼层
  1.     Sub jisuan()
  2.     Dim ar, n%, m As Single, p%, r%, min1%, min2%, min%, br, inp$
  3.         inp = Application.InputBox("说明:请输整数", "请输入任意整数", , , , , , 2)
  4.     If Not IsNumeric(inp) Then
  5.         MsgBox "输入有误"
  6.         Exit Sub
  7.     End If
  8.    
  9.     ReDim ar(1 To Len(inp), 1 To 2) As Integer
  10.     For n = 1 To Len(inp)
  11.         ar(n, 1) = n
  12.         ar(n, 2) = Mid(inp, n, 1)
  13.     Next n
  14.     Do
  15.         m = Application.InputBox("说明:请输入1-" & Len(inp) - 1 & "之间的整数", "请输入删除数字个数", , , , , , 1)
  16.     Loop Until Int(m) = m And m >= 1 And m <= 16
  17.     min = 1
  18.     ReDim br(1 To Len(inp) - m)
  19.     For p = 1 To Len(inp) - m
  20.         min2 = 9
  21.         For r = min To p + m
  22.             If ar(r, 2) < min2 Then
  23.                 min1 = ar(r, 1)
  24.                 min2 = ar(r, 2)
  25.             End If
  26.         Next r
  27.         min = min1 + 1
  28.         br(p) = min2
  29.     Next p
  30.     MsgBox "答案:" & Join(br, "")
  31.     End Sub
复制代码

评分

参与人数 1 +9 收起 理由
vbyou127 + 9 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-3-30 09:50 | 显示全部楼层
本帖最后由 vbyou127 于 2016-3-30 10:07 编辑
yorkchenshunan 发表于 2016-3-30 08:35

结果正确,请补上先后删除了哪些数字


假设用整数13425638694,结果如下表述最好

请输入整数:13425638694
输入删除个数:5
先后删除数字:4,3,6,5,8
删除后最小:123694

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-25 16:15 , Processed in 0.221463 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表