Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 806|回复: 2

已知参数和,求参数组合及有多少组组合数

[复制链接]
发表于 2021-12-29 15:51 | 显示全部楼层 |阅读模式
例如数字1、2、3、4、5、6、7、8、9中有有哪些相加等15,有几组加起来等于15
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-12-30 12:18 | 显示全部楼层
回复

使用道具 举报

发表于 2021-12-30 16:37 | 显示全部楼层
  1. Option Explicit
  2. Dim arr1(1 To 100000, 1 To 1)
  3. Dim k As Integer
  4. Dim a As Integer
  5. Sub 递归筛选符合条件组合()
  6.     On Error Resume Next
  7.    k = 0
  8.    Erase arr1
  9.    Dim arr
  10.    arr = Range("a2:a10")
  11.    Xzuhe arr, 1, "", 0
  12.    Range("b10000").End(xlUp).Offset(1, 0).Resize(k) = arr1
  13. End Sub
  14. Sub Xzuhe(arr, x, sr, y)
  15.     If y = a Then
  16.         If Application.Evaluate(sr) = 15 Then
  17.             k = k + 1
  18.             arr1(k, 1) = sr
  19.         End If
  20.         Exit Sub
  21.     End If
  22.     If x < UBound(arr, 1) + 1 And Application.Evaluate(sr) <= 15 Then
  23.         Xzuhe arr, x + 1, sr & "+" & arr(x, 1), y + 1
  24.         Xzuhe arr, x + 1, sr, y
  25.     End If
  26. End Sub
  27. Sub 数据提取()
  28. Dim t
  29. t = Timer
  30. Range("b1").Resize(1000) = ""
  31. Range("b1") = "求和项"
  32. Dim i As Integer
  33.     For i = 1 To 9
  34.         a = i
  35.         递归筛选符合条件组合
  36.     Next i
  37. Range("c10000").End(xlUp).Offset(1, 0) = Timer - t
  38. End Sub
复制代码
递归法:
思路,
1.定义3个公共变量,arr1数组存结果,k和a
2.当个数为a个的时候,求和为15,那么k就等于k+1,等于存入一个arr1数组的值
3.递归法自动组合所有的情况,判断求和如果少于等于15,则继续运行,否则不运行减少运行时间
4.解决问题,麻烦给最佳
1640853402(1).jpg

新建 XLS 工作表.rar

15.48 KB, 下载次数: 0

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-29 20:30 , Processed in 0.290144 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表