永发信息网

VBA可以在一组数据中找出一个和的几个加数吗

答案:3  悬赏:60  手机版
解决时间 2021-11-08 02:50
  • 提问者网友:却不属于对方
  • 2021-11-07 19:09
VBA可以在一组数据中找出一个和的几个加数吗
最佳答案
  • 五星知识达人网友:轮獄道
  • 2021-11-07 19:31
用规划求解的办法吧
菜单--工具--规划求解

见图(随便做了一个)



全部回答
  • 1楼网友:詩光轨車
  • 2021-11-07 21:15
可以用循环,每两个数加 然后每三个数加 以此类推,计算机算起来还是很快的。
  • 2楼网友:酒安江南
  • 2021-11-07 19:45

不知道你是否喜欢编程,你这是要求组合数,就是N个数中任意的提取(1~N)个数,输出满足条件(例如和为43)的一组。


最简单的编程方法是N重循环,但是这只适合一组数编一个程序,要一个程序解决任意的数列,应该使用回溯算法,例如用下面的代码解决你的问题:


Option Explicit

Sub xxx()
    Dim a, n, m, r
    a = Array(12, 15, 17, 14, 12)
    r = "43="
    If chk(a, LBound(a), UBound(a), 43, r) Then MsgBox r
End Sub

Function chk(ByRef a, ByVal n, ByVal m, ByVal s, ByRef r) As Boolean
    Dim i, r2
    chk = True
    For i = n To m
        If a(i) = s Then
            r = r & "+" & a(i)
            Exit Function
        End If
        If i < m And a(i) < s Then
            r2 = r & "+" & a(i)
            If chk(a, i + 1, m, s - a(i), r2) Then
                r = r2
                Exit Function
            End If
        End If
    Next i
    chk = False
End Function


程序中关键的就是那个chk函数,这个函索搜索数组a的n~m元素中和为s的数列,结果放在字符串r里面,主程序调用一次既可。


chk函数,针对数组a的n~m之间的每一个数,先判断这个数是否满足要求,再判断这个数和后面的任意一个数是否满足要求,用递归方法求解。

追问你好,我后来才看见你的回答,感觉你的回答也解决了我的疑惑,但是我已经采纳完答案了,不知怎么才能再奖励你5个财富值,以表达我对你的感谢之情呢追答关键还是你的问题解决了没有,5个财富也不值多少钱~~~追问你好,可以加下你的QQ,和你学习下VBA知识吗追答非常抱歉,我不上QQ,而且VBA也只是勉强入门。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯