我是一家公司的统计员,经常会算一些产量,单一多往往会弄乱!现有已知的10张单(或更多单),每个单都个合计数,因事先分单加了个“总数”,可不小心把单弄乱了,现只知道有个“总数”和10张单的各个“合计数”,条件是:10张单中有几张单合计数加起来等于“总数”,请问如何实现这个算法!急,谢谢!

解决方案 »

  1.   

    幸好只有10多个
    用递归就行了
    例子,只是说一下意思
    function getsum(a())
        dim count
        dim b()
        if sum(a)>total
        count=ubound(a) 
        redim b(count-1)
        for i=1 to count     
            设置数组b
            getsum(b)
        next i
    end function
      

  2.   

    10张单,不过只有1024种组合方式而已,不困难。Dim A(9) As Double '储存这10张单的“合计数”
    Dim Sum As Double  '储存“总数”
    Dim I,J,K as Integer
    Dim TmpSum as Double
    Dim TmpStr as StringFor I = 1 To 1024
        TmpSum = 0
        TmpStr = ""
        K = I
        For J = 0 To 9
            TmpSum = TmpSum + (K Mod 2) * A(J)
            K = Int(K / 2)
            TmpStr = TmpStr + (IIf((K Mod 2 = 1), Trim(Str(J)) + " ", ""))
        Next
        If TmpSum = Sum Then
            MsgBox "Found it:" + TmpStr
        End If
    Next
      

  3.   

    晕,不小心发出去了
    总的意思就是如果n个的和>total
    就测试n次n-1个,n初始为总个数了
    你自己写吧
      

  4.   

    do
    rnd1=int(rnd*10)
    x=0
    for i=0 to rnd1
    x=x+ss(rnd*10)
    if x=ucount then stop
    next i
    loop while true
      

  5.   

    哟,不好意思,写错一点点小东西。
    我上边的代码改成这样:For I = 1 To 1024
        TmpSum = 0
        TmpStr = ""
        K = I
        For J = 0 To 9
            TmpSum = TmpSum + (K Mod 2) * A(J)
    '下边这两句写反位置了,呵呵
            TmpStr = TmpStr + (IIf((K Mod 2 = 1), Trim(Str(J)) + " ", ""))
            K = Int(K / 2)      Next
        If TmpSum = Sum Then
            MsgBox "Found it:" + TmpStr
        End If
    Next