返回列表 上一主題 發帖

如何從一堆數字找出加總符合特定值

嘩數值元素有31個, 最大可能組合次數= 2^31, 衹能試試:
  1. Option Explicit
  2. Dim b(), c(1), m&, k&, f$, t(1), dgt As Boolean
  3. Sub zz()
  4.     Dim a, i&
  5.     Range("d2:d" & Rows.Count).ClearContents
  6.     dgt = False
  7.     f = "+"
  8.     a = Split("39824 39615 24616 13572 12760 10530 9963 8090 7290 7240 6300 5940 5822 5814 4536 4342 4114 3816 3150 3078 2520 1944 1881 1560 1232 1170 1062 972 816 729 63318", " ")
  9.     m = UBound(a) + 1
  10.     c(1) = 49177
  11.     ReDim b(1 To m)
  12.     For i = 1 To m
  13.         b(i) = a(i - 1) ', 1)
  14.     Next i
  15.     k = 0: Call dg("", m)
  16.     MsgBox c(1) & "=" & Left(c(0), Len(c(0)) - 1)
  17. End Sub
  18. Sub dg(s$, mi&)
  19.     Dim j&, jj&, ss$, a, bb()
  20.     For j = 0 To 1
  21.         If dgt Then Exit Sub
  22.         If j Then ss = b(mi) Else ss = ""
  23.         If mi > 1 Then Call dg(IIf(ss = "", s, ss & f & s), mi - 1) Else k = k + 1: a = IIf(ss = "", s, ss & f & s)
  24.         If Len(a) Then
  25.             c(0) = a
  26.             a = Split(a, "+")
  27.             ReDim bb(UBound(a))
  28.             For jj = 0 To UBound(a)
  29.                 bb(jj) = Val(a(jj))
  30.             Next
  31.             If Application.Sum(bb) = c(1) Then dgt = True
  32.         End If
  33.     Next j
  34. End Sub
複製代碼

TOP

        靜思自在 : 甘願做、歡喜受。
返回列表 上一主題