假设先设定一个数,比如20,在输入一组数据,比如:1,5,8,2,6,4,9,2...,在设定一个范围比如3—4,让程序自动生成N种排列,要是3或4个先前输入的数据相加等于20,能否给点思路和代码

解决方案 »

  1.   

    你的题意不清楚啊。程序自动生成n中排列?要是加20就好了。
    用一个i记录次数。当访问到3或者4的时候就知道i的值,然后就用个for语句就解决了。
      

  2.   

    给你个低速算法Option ExplicitDim m_lRangeCount As Long
    Dim m_lCount As Long
    Dim m_alDest() As Long
    Dim m_alRange() As Long
    Dim m_lSum As Long
    Private Sub Form_Load()
        Dim aSort() As Long
        
        m_lRangeCount = 2
        ReDim m_alRange(m_lRangeCount - 1)
        m_alRange(0) = 3
        m_alRange(1) = 4
        
        m_lCount = 5
        ReDim aSort(1 To m_lCount, 1 To 2) As Long
        ReDim m_alDest(1 To m_lCount)
        m_alDest(1) = 1
        m_alDest(2) = 3
        m_alDest(3) = 5
        m_alDest(4) = 2
        m_alDest(5) = 6
        
        
        m_lSum = 9
        
        Call go(aSort())
    End SubSub go(aSortArray() As Long, Optional lIndex As Long = -1)
        Dim lLB As Long, lUB As Long
        Dim N As Long
        Dim i As Long, t As Long
        lLB = LBound(aSortArray)
        lUB = UBound(aSortArray)
        N = lUB - lLB + 1
            
            
        If lIndex = N + 1 Then
            test aSortArray()
        Else
            lIndex = IIf(lIndex = -1, 1, lIndex)
            For i = 1 To N
                If aSortArray(i, 2) <> 1 Then
                    aSortArray(lIndex, 1) = i
                    aSortArray(i, 2) = 1
                    Call go(aSortArray(), lIndex + 1)
                    aSortArray(i, 2) = 0
                End If
            Next
        End If
    End Sub
    Sub test(aSortArray() As Long)
        Dim i As Long, j As Long
        Dim s As String
        Dim lTmp As Long
        For j = LBound(m_alRange) To UBound(m_alRange)
            lTmp = 0
            For i = 1 To m_alRange(j)
                lTmp = lTmp + m_alDest(aSortArray(i, 1))
            Next
            If lTmp = m_lSum Then
                s = ""
                For i = LBound(aSortArray) To UBound(aSortArray)
                    s = s & CStr(aSortArray(i, 1)) & " "
                Next
                
                s = "范围1-" & CStr(m_alRange(j)) & ":" & s
                '输出到列表
                List1.AddItem s
            End If
        Next
    End Sub
      

  3.   

    输入进去的数据是m_alDest,数据的个数是m_lCount,不同的范围存放在m_alRange,指定范围的个数是m_lRangeCount,合计是m_lSumaSort是用来进行排列计算用的
      

  4.   

    昨天copy這貼丟了,今天繼續copy回去研究研究