VBA实现排列组合,跪求!!! 160

共12列,每列代表1~12月,共91行,每行为0度到90度共91个角度,不同行列下对应不同的数值。急需要实现的是:将12个月分成四组,最后输出每种组合形式下,数值之和最大... 共12列,每列代表1~12月,共91行,每行为0度到90度共91个角度,不同行列下对应不同的数值。
急需要实现的是:将12个月分成四组,最后输出每种组合形式下,数值之和最大对应的度数和在该度数下的数值之和。其中,每组中各月要相邻,且12月可以和1月为一组。
12个月分成四组不一定非是平均分配,一个组合里面最少包含一个月,最多包含9个月。麻烦您能不能再修改一下啊?非常感谢。
我知道总共的组合方式是C12(4)种组合,=12*11*10*9/4/3/2/1共495种组合方式。
展开
 我来答
zzllrr小乐
高粉答主

2015-08-14 · 小乐图客,小乐数学,小乐阅读等软件作者
zzllrr小乐
采纳数:20147 获赞数:78778

向TA提问 私信TA
展开全部

使用下列宏,计算结果放在新建的Sheet里面


Sub group_by_zzllrr()
    Dim a, m, n, ii, d
    Set a = ActiveSheet
    m = Split("1 2 3 4 5 6 7 8 9 10 11 12 1 2", " ")
    Sheets.Add After:=Sheets(Sheets.Count)
    Range("A1:C1") = Array("分组", "所求度数", "最大数值和")
    For i = 0 To 2
        For j = 0 To 3
            n1 = m(i + 3 * j)
            n2 = m(i + 3 * j + 1)
            n3 = m(i + 3 * j + 2)
            ii = 2 + j + i * 4
            Range("A" & ii) = n1 & " " & n2 & " " & n3
            
            s = 0
            d = 0
            For k = 0 To 90
                t = a.Cells(k + 2, n1 + 1) + a.Cells(k + 2, n2 + 1) + a.Cells(k + 2, n3 + 1)
                If t > s Then
                    s = t
                    d = k
                End If
            
            Next k
            
            Range("B" & ii) = d
            Range("C" & ii) = s
            
        Next j
    Next i
End Sub
追问
您好!首先很感谢你的解答。现在还有一个问题是,12个月分成四组不一定非是平均分配,一个组合里面最少包含一个月,最多包含9个月。麻烦您能不能再修改一下啊?非常感谢。
我知道总共的组合方式是C12(4)种组合,=12*11*10*9/4/3/2/1共495种组合方式。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式