有一数值,知道它是由一批数值中的某几个数组成,如何写一程序求出这几个数呢?
例:
数值为:
10414.36
数组为:
1134.56
239.26
3598.92
408.27
5272.61
263.28
1111.56
226.53
141
1355.89
3.45
2149.9
10
218.38
150
现在手工计算得:10414.36=1134.56+3598.92+408.27+5272.61
请问,如何用程序实现呢?
给点思路也行!!!
Sub GETALL(ByVal SUM As Single, ByVal x As Variant, ByRef RESULT() As String)
Dim A(), I As Long, NUM As Integer, ALLNUM As Long, n As Integer
Dim TEMP1 As Long, TEMP2() As Integer, TEMP As Single
n = UBound(x)
ReDim TEMP2(0 To n - 1)
ALLNUM = 0
For I = 1 To 2 ^ n
TEMP1 = I
NUM = 0
TEMP = 0
For j = 0 To n - 1 转换为二进制
TEMP2(j) = TEMP1 And 1 0 or 1
TEMP1 = TEMP1 \ 2
If TEMP2(j) = 1 Then
NUM = NUM + 1
ReDim Preserve A(1 To NUM)
A(NUM) = x(j)
TEMP = TEMP + x(j)
End If
Next
If Abs(TEMP - SUM) < 0.01 Then 满足条件
ALLNUM = ALLNUM + 1
ReDim Preserve RESULT(1 To ALLNUM)
RESULT(ALLNUM) = Join(A, "+") & "=" & SUM 结果保存
End If
Next
MsgBox Join(RESULT, vbCrLf), 4096, ALLNUM & " 种方法"
End Sub
Private Sub Command1_Click()
Dim x, S() As String
x = Array(1134.56, 239.26, 3598.92, 408.27, 5272.61, 263.28, 1111.56, 226.53, 141, 1355.89, 3.45, 2149.9, 10, 218.38, 150)
GETALL 10414.36, x, S 和为10414.36 时
End Sub