|
- Option Explicit
- Dim arr1(1 To 100000, 1 To 1)
- Dim k As Integer
- Dim a As Integer
- Sub 递归筛选符合条件组合()
- On Error Resume Next
- k = 0
- Erase arr1
- Dim arr
- arr = Range("a2:a10")
- Xzuhe arr, 1, "", 0
- Range("b10000").End(xlUp).Offset(1, 0).Resize(k) = arr1
- End Sub
- Sub Xzuhe(arr, x, sr, y)
- If y = a Then
- If Application.Evaluate(sr) = 15 Then
- k = k + 1
- arr1(k, 1) = sr
- End If
- Exit Sub
- End If
- If x < UBound(arr, 1) + 1 And Application.Evaluate(sr) <= 15 Then
- Xzuhe arr, x + 1, sr & "+" & arr(x, 1), y + 1
- Xzuhe arr, x + 1, sr, y
- End If
- End Sub
- Sub 数据提取()
- Dim t
- t = Timer
- Range("b1").Resize(1000) = ""
- Range("b1") = "求和项"
- Dim i As Integer
- For i = 1 To 9
- a = i
- 递归筛选符合条件组合
- Next i
- Range("c10000").End(xlUp).Offset(1, 0) = Timer - t
- End Sub
复制代码 递归法:
思路,
1.定义3个公共变量,arr1数组存结果,k和a
2.当个数为a个的时候,求和为15,那么k就等于k+1,等于存入一个arr1数组的值
3.递归法自动组合所有的情况,判断求和如果少于等于15,则继续运行,否则不运行减少运行时间
4.解决问题,麻烦给最佳
|
|