我有一组数值(数目不定),要求在其中找出和为某一个数(给出的)的所有组合。我给你一些数字,例如:
2,
485.69
7,
184.00
1314
896.34
1286.48
719.55
3321.17
8795.75
1821.94
71.09
162.51
50.77
84.44
24.60
一系列数字
然后从这些数字中找到一些数字,它们的和是6971.2,所有的组合都要。不知道大家明白没有!
怎样实现这个算法?谁先给出代码,50分全给他。
2,
485.69
7,
184.00
1314
896.34
1286.48
719.55
3321.17
8795.75
1821.94
71.09
162.51
50.77
84.44
24.60
一系列数字
然后从这些数字中找到一些数字,它们的和是6971.2,所有的组合都要。不知道大家明白没有!
怎样实现这个算法?谁先给出代码,50分全给他。
Dim n(4) As Double
Dim Fn As Double
Dim i, j, k, l As Doublen(1) = 2
n(2) = 7
n(3) = 5
n(4) = 3Fn = 12For i = 1 To UBound(n) - 1
For j = i + 1 To UBound(n)
If n(i) + n(j) = Fn Then Picture1.Print Str(n(i)) & "+" & Str(n(j)) & "=" & Str(Fn)
For k = j + 1 To UBound(n)
If n(i) + n(j) + n(k) = Fn Then Picture1.Print Str(n(i)) & "+" & Str(n(j)) & "+" & Str(n(k)) & "=" & Str(Fn)
For l = k + 1 To UBound(n)
If n(i) + n(j) + n(k) = Fn Then Picture1.Print Str(n(i)) & "+" & Str(n(j)) & "+" & Str(n(k)) & "+" & Str(n(l)); "=" & Str(Fn)
Next
Next
Next
Next
End Sub我做元素小的先. 只有4個元素,所以要用到4個循環.如果元素個數不定的話很難做,具體更好的方法還沒想到.
2 如果累加和=6971.2,那么输出解,然后将( 累加和 - 最后累加进去的两个数)作为新的累加和,〔在累加时需记录进入累加和的数的位置),此时需退至(即回溯)最后累加进入的倒数第二个数的下一个位置开始累加;
3 如果累加和>6971.2,那么直接前进至下一个数进行累加,如果此时已到数的末尾,则回退至倒数第二个数的下一个数,然后累加;循环执行以上三步,直至回退位置指向最后一个元素时,结束,此时已将所有满足条件的数的组合找到。