试图找到所有可能的组合

时间:2014-09-10 13:38:19

标签: excel

我一直在尝试使用excel解决以下问题,我不知道从哪里开始,我尝试过使用组合和渗透,但只是对它们有基本的了解,你们将如何解决这个问题?

有6种咖啡,有10种风味,你可以在每种咖啡中放一次,两次或三次。基于此,我想知道(并列出)独特的风味组合,以及如果没有同一杯咖啡,你可以走多长时间。

2 个答案:

答案 0 :(得分:1)

像这样构建你的表:

A       B
Coffee1 Syrup1
Coffee2 Syrup2
Coffee3 Syrup3
Coffee4 Syrup4
Coffee5 Syrup5
Coffee6 Syrup6
        Syrup7
        Syrup8
        Syrup9
        Syrup10

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

=COUNTA(A:A)*COUNTA(B:B)
+COUNTA(A:A)*COUNTA(B:B)^2
+COUNTA(A:A)*COUNTA(B:B)^3

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

答案 1 :(得分:1)

使用宏非常简单。

首先要注意的是我们需要组合而不是排列。这是因为{Kona,vanella,chocolate}与{Kona,chocolate,香草}。

将6种咖啡放在 A1 A6

将10种口味放入 B2 B11。 B1 留空。

输入并运行以下 VBA 宏:

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窗口
  4. 如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 要使用Excel中的宏:

      1. ALT-F8
      2. 选择宏
      3. 触碰RUN
      4. 要了解有关宏的更多信息,请参阅:

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

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

        必须启用宏才能使其生效!

        以下是一个示例:

        xx

        修改#1

        以下是更新后的代码:

        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
        

        使用此版本,您必须填写 B1 B10 ,并将 B11 留空!