Страницы: 1
RSS
генератор комбинаций чисел
 
Здравствуйте!пробовал переделывать макросы из вашего архива по сходным темам,не получилось.
Суть: вписать на листе,в произвольном количестве столбцов,все 376992 варианта лотереи 5 из 36,по 5 чисел,не повторяясь,т.е. 12345 это тоже самое,что и 12354. Прошу не кидаться тапками,если тема избита.
 
По быстрому, как то так
Скрытый текст
 
У меня код чуть покороче и сразу отсортировано  :D  
Код
Sub www()
    Dim i1&, i2&, i3&, i4&, i5&, k&
    
    k = 1
    For i1 = 1 To 32
        For i2 = i1 + 1 To 33
            For i3 = i2 + 1 To 34
                For i4 = i3 + 1 To 35
                    For i5 = i4 + 1 To 36
                        Cells(k, 1).Resize(1, 5) = Array(i1, i2, i3, i4, i5)
                        k = k + 1
                    Next i5
                Next i4
            Next i3
        Next i2
    Next i1
End Sub
Изменено: ber$erk - 10.09.2013 10:54:08
Учимся сами и помогаем другим...
 
ber$erk ;)  :!:
 
Вариант для любых выборок

Код
Sub MyCombin()
    Dim a&(), i&, j&, m&, n&, p&
    m = 5
    n = 12

    Range("a1").CurrentRegion.ClearContents
    ReDim a(1 To m)
    For i = 1 To m: a(i) = i: Next i
    If m = n Then p = 1 Else p = m

    Do
        j = j + 1
        Cells(j, 1).Resize(, m) = a
        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
End Sub
Изменено: MCH - 10.09.2013 11:15:17
 
Код моего тезки (МСН) долго на лист 400 000 вариантов выводит.
Вот его код, чуть переделанный.
Скрытый текст
Изменено: Михаил С. - 10.09.2013 12:38:56
 
Всем,огромное спасибо!все макросы работают отлично,я как профан особой разницы не заметил,кроме того,что комбинаторика.xml работает быстрее всех.
 
Вариантом, как у ber$erk я сам пользовался, очень давно.
Вариант МСН хорош тем, что позволяет легко менять входные условия, я всего лишь добавил в него вывод данных через массив.
 
Цитата
Вот его код, чуть переделанный
Миш, в алгоритме данного варианта есть ошибка, он не может вывести 5 из 5 и т.п., когда существует только одна выборка.
Исправленный алгоритм я выложил в предыдущем своем посте
 
Миш, я твой вариант использовал чисто в практических целях, мне 5 из 5 выводить не нужно. Поэтому я просто не обратил на это внимания  :D

Сути это не меняет, просто вывод сразу на лист - довольно долго. Через массив получается быстрее.
Изменено: Михаил С. - 10.09.2013 13:09:29
 
Цитата
Сути это не меняет, просто вывод сразу на лист - довольно долго. Через массив получается быстрее.
Так это ведь только алгоритм, я его в таком виде (с выгрузкой на лист) нигде не использую, а механизм генерации в массив - часто
Например, здесь и здесь
 
Цитата
Михаил С. написал:
Прикрепленные файлы
комбинаторика.xlsm  (23.39 КБ)
Господа, товарищи, а как быть если, например хочу указать 6 из 45. (свыше 8 миллионов комбинаций). Excel столько строк не поддерживает и макрос выдает ошибку. Есть решение?)
 
решение очевидно:
вывести данные в несколько столбцов

а теперь самое интересное: представьте, что данные уже на листе. у вас 48 колонок заполнено числами от 1 до 46, чем это вам поможет?
вы уже понимаете как из этой кучи вы будете выдергивать что-то нужное вам?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Из такой кучи это трудно. Поэтому удобнее было бы иметь все в структурированном виде в виде таблицы с большим количеством строк. Посему и вопрос, что делать если надо дополнительно 7 миллионов строк? Прибегать к pivot table?
Страницы: 1
Читают тему
Наверх