有一数值,知道它是由一批数值中的某几个数组成,如何写一程序求出这几个数呢?
例:
数值为:
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请问,如何用程序实现呢?
给点思路也行!!!

解决方案 »

  1.   

    TO:Fanks(铁面人)
    这个就是要用程序实现的原因。
      

  2.   

    to: yas(新一代的矿工)
    给点儿提示啦!
      

  3.   

    有空写一段完整代码给你。
    思路:
    (已知:)
    数值 a
    数组 x(1),x(2),...x(n)(关键,可做成函数:)
    将n个数分成m组 ,穷举所有分组。
    然后对每组求和,如和为a,打印(或显示)这组数据。
    (循环调用函数)
    对m从1 到n循环,求出一切可能分组,计算一切可能的求和,如和等于a,打印这组数据。
      

  4.   

    数组 x(1),x(2),...x(n)分成m组可以归结到将下标1,2,3,...n分m组
      

  5.   

    勘误:
    数组 x(1),x(2),...x(n)分成m个1组,可以归结到将下标1,2,3,...n,m个1组,打印所有分组情况。
      

  6.   


    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
    NextIf 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 SubPrivate 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
      

  7.   

    如果改为:Private Sub Command1_Click()
    Dim x, S() As String
    x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
    GETALL 25, x, S '和为25 时
    End Sub
    返回值:1+2+4+5+6+7=25
    3+4+5+6+7=25
    1+2+3+5+6+8=25
    2+4+5+6+8=25
    1+2+3+4+7+8=25
    2+3+5+7+8=25
    1+4+5+7+8=25
    1+3+6+7+8=25
    4+6+7+8=25