递归列举从数组b()中选出某些元素(允许重复)使其和等于num的所有组合

  1. Dim mycount As Long, s(1 To 65536, 1 To 1), num As Long
  2. Sub main()
  3. Dim a, b
  4. num = 45
  5. b = Array(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
  6. ReDim a(num)
  7. a(0) = b(0)
  8. search num, 0, 0, a, b
  9. [a1].Resize(65536) = s
  10. MsgBox "OK", , "Total count=" & mycount
  11. End Sub
  12. Sub search(ByVal n As LongByVal j As LongByVal index As LongByRef a, ByRef b)
  13. For i = index To UBound(b)
  14. If n = b(i) Then
  15. mycount = mycount + 1
  16. a(j) = b(i)
  17. For k = 0 To j
  18. s(mycount, 1) = s(mycount, 1) & " " & a(k)
  19. Next
  20. s(mycount, 1) = Replace(Trim(s(mycount, 1)), " ""+") & "=" & num
  21. Else
  22. a(j) = b(i)
  23. If n >= b(i) Then search n - b(i), j + 1, i, a, b
  24. End If
  25. Next
  26. End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值