首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图找到所有可能的组合

试图找到所有可能的组合
EN

Stack Overflow用户
提问于 2014-09-10 13:38:18
回答 2查看 62关注 0票数 0

我一直试着用excel解决下面的问题,我不知道从哪里开始,我试过使用组合和渗透,但只有基本的理解,你们会如何解决这个问题?

咖啡有6种,有10种香精,你可以在每种咖啡里放一、二、三杯。在此基础上,我想知道(并列出)独特的风味组合,以及你不喝同一杯咖啡能持续多长时间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-10 14:11:11

宏非常简单。

首先要注意的是,我们需要组合而不是排列。这是因为{Kona,vanella,巧克力}和{Kona,巧克力,香草}是一样的。

6杯咖啡的位置是A1 the A6

把这10种口味放在B2 B1B11中,B1空了。

输入并运行以下VBA宏:

代码语言:javascript
运行
复制
Sub CoffeeMixer()
    Dim k As Long, _
        i As Long, _
        j As Long, _
        l As Long, _
        Z As Long
    Z = 1
    For i = 1 To 10
        cf = Cells(i, 1).Value
        For j = 1 To 11
            fl1 = Cells(i, 2).Value
            For k = j+1 To 11
                fl2 = Cells(k, 2).Value
                For l = k+1 To 11
                    fl3 = Cells(l, 2).Value
                    If fl1 = fl2 Or fl1 = fl3 Or fl2 = fl3 Then
                    Else
                        Cells(Z, "C").Value = cf
                        Cells(Z, "D").Value = fl1
                        Cells(Z, "E").Value = fl2
                        Cells(Z, "F").Value = fl3
                        Z = Z + 1
                    End If
                Next l
            Next k
        Next j
    Next i
End Sub

这将产生875个样本。

宏非常容易安装和使用:

  1. ALT-F11打开VBE窗口。
  2. ALT-I ALT-M打开一个新模块。
  3. 粘贴内容并关闭VBE窗口

如果您保存工作簿,则将使用它保存宏。如果您在2003年晚些时候使用Excel版本,则必须将该文件保存为.xlsm而不是.xlsx。

若要删除宏,请执行以下操作:

  1. 打开上面的VBE窗口
  2. 清除代码
  3. 关闭VBE窗口

若要使用Excel中的宏:

  1. ALT-F8
  2. 选择宏
  3. 触控运行

要了解有关宏的更多信息,请参见:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

必须启用宏才能使其工作!

以下是一个示例:

EDIT#1

以下是更新的代码:

代码语言:javascript
运行
复制
Sub CoffeeMixer()
    Range("C:F").Clear
    Dim k As Long, _
        i As Long, _
        j As Long, _
        l As Long, _
        Z As Long
    Z = 1
    For i = 1 To 6
        cf = Cells(i, 1).Value
        For j = 1 To 11
            fl1 = Cells(j, 2).Value
            kk = j + 1
            If j = 11 Then kk = 11
            For k = kk To 11
                fl2 = Cells(k, 2).Value
                ll = 1 + k
                If k = 11 Then ll = 11
                For l = ll To 11
                    fl3 = Cells(l, 2).Value
                        Cells(Z, "C").Value = cf
                        Cells(Z, "D").Value = fl1
                        Cells(Z, "E").Value = fl2
                        Cells(Z, "F").Value = fl3
                        Z = Z + 1
                Next l
            Next k
        Next j
    Next i
End Sub

使用此版本时,您必须从B1B10填写,并将B11保留为空白!

票数 1
EN

Stack Overflow用户

发布于 2014-09-10 14:09:04

按如下方式构建您的桌子:

代码语言:javascript
运行
复制
A       B
Coffee1 Syrup1
Coffee2 Syrup2
Coffee3 Syrup3
Coffee4 Syrup4
Coffee5 Syrup5
Coffee6 Syrup6
        Syrup7
        Syrup8
        Syrup9
        Syrup10

对于上述数据,下面的公式将计算组合的总数:

代码语言:javascript
运行
复制
=COUNTA(A:A)*COUNTA(B:B)
+COUNTA(A:A)*COUNTA(B:B)^2
+COUNTA(A:A)*COUNTA(B:B)^3

尝试所有不同组合所需的时间取决于您的咖啡因成瘾程度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25766971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档