- Dim mycount As Long, s(1 To 65536, 1 To 1), num As Long
- Sub main()
- Dim a, b
- num = 45
- b = Array(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
- ReDim a(num)
- a(0) = b(0)
- search num, 0, 0, a, b
- [a1].Resize(65536) = s
- MsgBox "OK", , "Total count=" & mycount
- End Sub
- Sub search(ByVal n As Long, ByVal j As Long, ByVal index As Long, ByRef a, ByRef b)
- For i = index To UBound(b)
- If n = b(i) Then
- mycount = mycount + 1
- a(j) = b(i)
- For k = 0 To j
- s(mycount, 1) = s(mycount, 1) & " " & a(k)
- Next
- s(mycount, 1) = Replace(Trim(s(mycount, 1)), " ", "+") & "=" & num
- Else
- a(j) = b(i)
- If n >= b(i) Then search n - b(i), j + 1, i, a, b
- End If
- Next
- End Sub
递归列举从数组b()中选出某些元素(允许重复)使其和等于num的所有组合
最新推荐文章于 2021-08-17 23:19:44 发布
本文介绍了一种使用VBA实现特定数值组合的算法。通过递归搜索的方式,该算法可以找出所有可能的数列组合,使得这些组合的元素之和等于给定的目标数值。文章中的示例代码展示了如何定义数组并进行递归处理,最终统计出所有符合条件的组合数量。
4163

被折叠的 条评论
为什么被折叠?



