Страницы: 1
RSS
Реализация сочетаний из N по K без повторений.
 
Добрый день.
Обшарил весь форум в поисках решения, нашел несколько подходящих, но реализация не вполне та,которую я хочу. Моё знание VBA оставляет желать лучшего, поэтому прошу помощи.
По делу:
Требуется реализовать сочетания из n по k без повторений. C(nk) = n! / k! (n-k)! - так определяется число сочетаний без повторений.
Нашел на форуме подходящее решение (post_64644.xls). Реализовано через циклы, но количество предопределено 6 из 8. И тут главный вопрос как реализовать, скажем, ввод десяти значений n, потом k равное трем и получить ответ.
Иначе говоря, какой будет код если число циклов т.е. k не предопределено?
Буду благодарен за помощь.
Изменено: Deni3 - 19.10.2013 03:43:24
 
Можно так
Код
Sub MyCombin()
    Dim a&(), i&, j&, m&, n&, p&
    n = Val(InputBox("n =", , 10))
    m = Val(InputBox("m =", , 3))
    If n < m Or m < 1 Then Exit Sub

    ReDim a&(1 To m), b&(1 To WorksheetFunction.Combin(n, m), 1 To m)
    For i = 1 To m: a(i) = i: Next i
    If m = n Then p = 1 Else p = m
    
    Range("a1").CurrentRegion.ClearContents
    Do
        j = j + 1
        For i = 1 To m: b(j, i) = a(i): Next i
        If a(m) = n Then p = p - 1 Else p = m
        If p Then
            For i = m To p Step -1
                a(i) = a(p) + i - p + 1
            Next i
        End If
    Loop While p
    [a1].Resize(UBound(b), m) = b
End Sub
Изменено: MCH - 18.10.2013 15:18:49
Страницы: 1
Наверх