Страницы: 1
RSS
Подбор вариантов комбинации чисел по сумме
 
Добрый день!
Не могу понять...необходимо из 4-х чисел получить различные комбинации, сумма которых не будет превышать 1230.
Комбинации должны быть все возможные, а у меня получается только, что каждое число используется только один раз и не повторяется..
Помогите, пожалуйста. Если не сложно, то поправьте в файле, а то я так себе пользователь excel.
Изменено: helikA - 20.02.2020 12:39:53
 
Код
Sub Перебор()
    Dim a As Variant
    a = Range("A1:A4")
    Dim i1 As Long
    Dim i2 As Long
    Dim i3 As Long
    Dim i4 As Long
    Dim s As String
    For i1 = 0 To 1230 / a(1, 1)
    For i2 = 0 To 1230 / a(1, 1)
    For i3 = 0 To 1230 / a(1, 1)
    For i4 = 0 To 1230 / a(1, 1)
        If a(1, 1) * i1 + a(2, 1) * i2 + a(3, 1) * i3 + a(4, 1) * i4 <= 1230 _
        And a(1, 1) * i1 + a(2, 1) * i2 + a(3, 1) * i3 + a(4, 1) * i4 > 0 Then
            s = ""
            If i1 > 0 Then s = s & "+" & a(1, 1) * i1
            If i2 > 0 Then s = s & "+" & a(2, 1) * i2
            If i3 > 0 Then s = s & "+" & a(3, 1) * i3
            If i4 > 0 Then s = s & "+" & a(4, 1) * i4
            s = Mid(s, 2)
            s = "=" & s
            Debug.Print s
        End If
    Next
    Next
    Next
    Next
End Sub
 
Доброе время суток.
Версия на Power Query
Код
let
    Source = Table.FromColumns({{280,333,613,297,577,630,910,335,615,668,948,632,912,965,112,217,301,197,117}}, {"c1"}),
    c12 = Table.Join(Source, {}, Table.RenameColumns(Source, {"c1", "c2"}), {}),
    c123 = Table.Join(c12, {}, Table.RenameColumns(Source, {"c1", "c3"}), {}),
    c1234 = Table.Join(c123, {}, Table.RenameColumns(Source, {"c1", "c4"}), {}),
    filter = Table.SelectRows(c1234, each [c1] < [c2] and [c2] < [c3] and [c3] < [c4] and List.Sum(Record.FieldValues(_)) <= 1230),
    result = Table.Sort(Table.AddColumn(filter, "sum4", each List.Sum(Record.FieldValues(_))), {"sum4", Order.Descending})
in
    result
 
МатросНаЗебре, не работает, или я что-то не так делаю..
Страницы: 1
Наверх