从一组数据里取得合刚好等于某数的组合的算法:
function Sum(byref data() ,iBegin as interger,iSum as interger) as string
'参数描述 data是存储数据的容器 ibegin是搜索的开始位置,isum是要得到的合
sum = ""
for j=ibegin to ubound(data)
for i = j+1 to ubound(data)
if data(j) +data(i)=isum then
sum = sum & data(j) & data(i)
data(j)=0
data(i)=0
给序号从j开始后面的数排序
exit function
else if data(j)+data(i)<isum then
sum = sum & Sum(data,i,isum-data(j))
end if
next i
next j
end function
从一组数据里取得合刚好等于某数的组合的算法:
sub Sum(byref data() ,iBegin as interger,iSum as interger)
'参数描述 data是存储数据的容器 ibegin是搜索的开始位置,isum是要得到的合
for j=ibegin to ubound(data)
for i = j+1 to ubound(data)
if data(j) +data(i)=isum then
debug.print data(j)& data(i)
data(j)=0
data(i)=0
给序号从j开始后面的数排序
exit sub
else if data(j)+data(i)<isum then
GetSum(data,i,isum-data(j))
end if
next i
next j
end sub
Dim s As Long, i As Long, j As Long, out As String
Dim a(0 To 6) As Single, b(0 To 6, 0 To 6) As Boolean, c(0 To 6) As Single
a(0) = 5.5
a(1) = 4.7
a(2) = 4.2
a(3) = 3.7
a(4) = 1.1
a(5) = 7
a(6) = 3
For i = 0 To 6
c(i) = a(i)
Next i
s = 10
For i = 0 To 6
b(i, i) = True
For j = i + 1 To 6
If a(i) + a(j) > a(i) And a(i) + a(j) <= s Then
a(i) = a(i) + a(j)
b(i, j) = True
End If
Next j
Next i
For i = 0 To 6
out = ""
For j = 0 To 6
If b(i, j) Then
out = out & CStr(c(j)) & "+"
End If
Next j
out = Left(out, Len(out) - 1) & " 废料/" & CStr(Round(s - a(i), 1))
Print out
Next i
试试看