Есть файл (прилагается), где реализован полный перебор. Нужно реализовать перебор в таком же виде , но более полный. Перебор должен работать как счетчик, т.е. чтобы была возможность повторяемости элементов. Например, имеем числа 1, 2, 3, - на выходе должны получить: 111 112 113 121 122 123 131 132 133 211 ... ...
Есть файл (прилагается), где реализован полный перебор. Нужно реализовать перебор в таком же виде , но более полный. Перебор должен работать как счетчик, т.е. чтобы была возможность повторяемости элементов. Например, имеем числа 1, 2, 3, - на выходе должны получить: 111 112 113 121 122 123 131 132 133 211 ... ...ArtiEx
Если совсем в лоб, быстро на коленках, не погружаясь в алгоритмы комбинаторики, то как-то так для четырех: [vba]
Код
Sub generate() Dim i, j, k, l, m For i = 1 To 4 For j = 1 To 4 For k = 1 To 4 For l = 1 To 4 If i <> j And i <> k And i <> l And j <> k And j <> l And k <> l Then [b1].Offset(m) = i & j & k & l m = m + 1 End If Next l, k, j, i End Sub
[/vba]
P.S. Невнимательно прочитал. А если повторы цифр не надо исключать, то тогда просто IF убираем и еще проще становится: [vba]
Код
Sub generateWithRepeat() Dim i, j, k, l, m For i = 1 To 4 For j = 1 To 4 For k = 1 To 4 For l = 1 To 4 [b1].Offset(m) = i & j & k & l m = m + 1 Next l, k, j, i End Sub
[/vba]
Если совсем в лоб, быстро на коленках, не погружаясь в алгоритмы комбинаторики, то как-то так для четырех: [vba]
Код
Sub generate() Dim i, j, k, l, m For i = 1 To 4 For j = 1 To 4 For k = 1 To 4 For l = 1 To 4 If i <> j And i <> k And i <> l And j <> k And j <> l And k <> l Then [b1].Offset(m) = i & j & k & l m = m + 1 End If Next l, k, j, i End Sub
[/vba]
P.S. Невнимательно прочитал. А если повторы цифр не надо исключать, то тогда просто IF убираем и еще проще становится: [vba]
Код
Sub generateWithRepeat() Dim i, j, k, l, m For i = 1 To 4 For j = 1 To 4 For k = 1 To 4 For l = 1 To 4 [b1].Offset(m) = i & j & k & l m = m + 1 Next l, k, j, i End Sub
Я так понял, что нужны все комбинации (а не перестановки), так для 3 значений это будет 27 вариантов (3^3), для 4 значений - 256 вариантов (4^4), так для количества данных более 7 уже будет проблематично выводить на лист все варианты комбинаций
Можно решить формулами или макросом Вариант алгоритма: запускаем цикл от 0 до n^n-1 (где n - это количество значений) переводим число из счетчика в n-значную систему счисления, тем самым получим полный перебор всех вариантов
Я так понял, что нужны все комбинации (а не перестановки), так для 3 значений это будет 27 вариантов (3^3), для 4 значений - 256 вариантов (4^4), так для количества данных более 7 уже будет проблематично выводить на лист все варианты комбинаций
Можно решить формулами или макросом Вариант алгоритма: запускаем цикл от 0 до n^n-1 (где n - это количество значений) переводим число из счетчика в n-значную систему счисления, тем самым получим полный перебор всех вариантовMCH
Числа в столбце B Вам нужны, или заполнять только столбцы D:G данными из A1:A4? Сколько всего может быть значений в столбце A, фиксированное кол-во или переменное? Если данных будет 7 и более значений, куда их размещать (на лист в один столбик не влезут)?
Числа в столбце B Вам нужны, или заполнять только столбцы D:G данными из A1:A4? Сколько всего может быть значений в столбце A, фиксированное кол-во или переменное? Если данных будет 7 и более значений, куда их размещать (на лист в один столбик не влезут)?
а возможно сделать чтоб не было обратного порядка. Тоисть 987654321 а только по возрастанию от 1 до 10 к примеру, а также была возможность выбирать длину перебора к примеру 1234, 2345, 6789 и т.к.
а возможно сделать чтоб не было обратного порядка. Тоисть 987654321 а только по возрастанию от 1 до 10 к примеру, а также была возможность выбирать длину перебора к примеру 1234, 2345, 6789 и т.к.onnline365
onnline365 Можете воспользоваться вышеуказанным макросом, а потом фильтрануть массив с помощью не очень сложных функций, проверяющих длину числа и логику возрастания цифр. Но, опять таки, - в своем топике и при наличии файла-примера.
onnline365 Можете воспользоваться вышеуказанным макросом, а потом фильтрануть массив с помощью не очень сложных функций, проверяющих длину числа и логику возрастания цифр. Но, опять таки, - в своем топике и при наличии файла-примера.ArkaIIIa
onnline365 Можете воспользоваться вышеуказанным макросом, а потом фильтрануть массив с помощью не очень сложных функций, проверяющих длину числа и логику возрастания цифр. Но, опять таки, - в своем топике и при наличии файла-примера.
onnline365 Можете воспользоваться вышеуказанным макросом, а потом фильтрануть массив с помощью не очень сложных функций, проверяющих длину числа и логику возрастания цифр. Но, опять таки, - в своем топике и при наличии файла-примера.