![]() |
![]() |
![]() |
|
Нужна обработка для составления сочетаний чисел из n элементов по m(k) | ☑ | ||
---|---|---|---|---|
0
VNikola
22.04.15
✎
15:21
|
На работе дали задание составить все комбинации чисел (к примеру: длина комбинации 10 из ста).
1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 11 1 2 3 4 5 6 7 8 9 12 и т.д. комбинации нужно чтобы не повторялись. Я уже неделю сижу, бьюсь, а результатов не добился. Для расчета количества комбинаций я воспользовался формулой сочетаний (Cnm) получил число сочетаний, а вот дальше тупик. ПОМОГИТЕ КТО ЧЕМ МОЖЕТ! |
|||
1
asady
22.04.15
✎
15:25
|
(0) самый простоя алгоритм:
1. Генератором случайных числе генерим массив из 10 чисел (из 100) 2. проверяем есть ли такое число уже в массиве комбинаций. 3. если нет то добавляем его в массив комбинаций 4. переходим к новой итерации 5 остановка по достижению массивом размера числа сочетаний или по прерыванию пользователя. |
|||
2
Fragster
гуру
22.04.15
✎
15:26
|
(1) нафига это всё?
|
|||
3
mikecool
22.04.15
✎
15:27
|
(2) такой же вопрос и к (0) ))
|
|||
4
Fragster
гуру
22.04.15
✎
15:28
|
(3) ну, к (0) - это лабораторная, наверное...
|
|||
5
asady
22.04.15
✎
15:28
|
(2) прикольно сидеть и смотреть как она последний элемент ищет
|
|||
6
pessok
22.04.15
✎
15:29
|
(4) (0) пишет, что "на работе"
|
|||
7
ВРедная
22.04.15
✎
15:31
|
(1) Зачем генератором, 10 циклов в цикле или рекурсивный вызов не подойдет?
Для И = 1 по 100 Цикл Для К = И + 1 по 100 Цикл Для Л = К + 1 по 100 Цикл МассивКомбинаций.Добавить("" + И + К + Л); |
|||
8
ifso
22.04.15
✎
15:33
|
(6) "Все хлеба поубраны, всё посдали загодя" (с)
|
|||
9
asady
22.04.15
✎
15:33
|
(7) ну это не интересно. так любой может
а тут запустил процесс и наслаждайся её муками подбора и чувствуй себя королем - хочу остановлю её труд, хочу нет. |
|||
10
Михаил Козлов
22.04.15
✎
15:44
|
С(100,10) это примерно 15 знаков в десятичной записи.
Не многовато будет? Результат куда будете помещать? |
|||
11
jsmith82
22.04.15
✎
15:57
|
Это должна быть рекурсивная функция
|
|||
12
jsmith82
22.04.15
✎
15:58
|
Функция НайтиКомбинации(Длина, Диапазон)
КонецФункции |
|||
13
jsmith82
22.04.15
✎
15:59
|
На выходе массив массивов
|
|||
14
jsmith82
22.04.15
✎
16:00
|
Уже полчаса голову ломаю. Решение нашёл. Формализовать трудно
|
|||
15
VNikola
22.04.15
✎
16:11
|
Через ГСЧ я пробовал. долго ни не эффективно.
сочетания могут быть разными 12 из 100 или 10 из 60 ( к примеру при расчете комбинаций 10 из 100 получается что их можно составить 17310309456440) при таком раскладе у меня 1С зависла на час после я ее срубил потому что успела перебрать тока примерно 2-6% |
|||
16
jsmith82
22.04.15
✎
16:18
|
Ха! Мозги не пропиты! Решил
|
|||
17
jsmith82
22.04.15
✎
16:19
|
Правда только текст функции написал
|
|||
18
jsmith82
22.04.15
✎
16:19
|
Функция НайтиКомбинации(Длина, Диапазон)
Если Длина = 1 Тогда ГлавныйМассив = Новый Массив(); Массив = Новый Массив(); Для Итер = 1 По Диапазон Цикл Массив.Добавить(Итер); КонецЦикла; ГлавныйМассив.Добавить(Массив); Возврат ГлавныйМассив; Иначе Правый = НайтиКомбинации(Длина - 1, Диапазон); ГлавныйМассив = Новый Массив(); Для Итер = 1 По Диапазон Цикл Массив = Новый Массив(); Массив.Добавить(Итер); Для Каждого Строка Из Правый Цикл Для Каждого Эл Из Строка Цикл Массив.Добавить(Эл); КонецЦикла; КонецЦикла; ГлавныйМассив.Добавить(Массив); КонецЦикла; КонецЕсли; КонецФункции |
|||
19
jsmith82
22.04.15
✎
16:20
|
Щас проверю в 1с
|
|||
20
jsmith82
22.04.15
✎
16:45
|
Ошибка. Допилить надо
|
|||
21
jsmith82
22.04.15
✎
16:45
|
Лень покамест
|
|||
22
Гёдза
22.04.15
✎
17:09
|
задача гуглится нараз два
|
|||
23
jsmith82
22.04.15
✎
21:55
|
Ха! Мозги не пропиты! Решил
|
|||
24
jsmith82
22.04.15
✎
21:56
|
Функция НайтиКомбинации(Длина, Диапазон)
Если Длина = 1 Тогда ГлавныйМассив = Новый Массив(); Для Итер = 1 По Диапазон Цикл Массив = Новый Массив(); Массив.Добавить(Итер); ГлавныйМассив.Добавить(Массив); КонецЦикла; Возврат ГлавныйМассив; Иначе Правый = НайтиКомбинации(Длина - 1, Диапазон); ГлавныйМассив = Новый Массив(); Для Итер = 1 По Диапазон Цикл Для Каждого Строка Из Правый Цикл Массив = Новый Массив(); Массив.Добавить(Итер); Для Каждого Эл Из Строка Цикл Массив.Добавить(Эл); КонецЦикла; ГлавныйМассив.Добавить(Массив); КонецЦикла; КонецЦикла; Возврат ГлавныйМассив; КонецЕсли; КонецФункции |
|||
25
VNikola
23.04.15
✎
17:11
|
jsmith82 Спасибо! Очень помогло!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |