我有一组数值(数目不定),要求在其中找出和为某一个数(给出的)的所有组合。我给你一些数字,例如:
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分全给他。

解决方案 »

  1.   

    Private Sub Command1_Click()
    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.   

    这个需要用到回溯算法,先从第一个数向后累加,每累加一个数,进行下述判断:1    如果累加和<6971.2,那么继续和下一个数累加;
    2    如果累加和=6971.2,那么输出解,然后将( 累加和 - 最后累加进去的两个数)作为新的累加和,〔在累加时需记录进入累加和的数的位置),此时需退至(即回溯)最后累加进入的倒数第二个数的下一个位置开始累加;
    3    如果累加和>6971.2,那么直接前进至下一个数进行累加,如果此时已到数的末尾,则回退至倒数第二个数的下一个数,然后累加;循环执行以上三步,直至回退位置指向最后一个元素时,结束,此时已将所有满足条件的数的组合找到。
      

  3.   

    lhfcsdn(小刘) 说的有点意思,可是2,3两步说的最后一句不大明白“则回退至倒数第二个数的下一个数,然后累加;”