Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
TR411
3 / 3 / 0
Регистрация: 31.10.2013
Сообщений: 32
1

Алгоритм на M (заданное на перёд количество) вложенных циклов FOR

25.02.2014, 12:35. Просмотров 275. Ответов 0
Метки нет (Все метки)

Есть следующий код, в котором количество вложенных циклов M=3.
Данный код, написанный на VBA Excel, выводит на рабочий лист все переборы M=3 позиции из N=5 элементов, где каждый набор характеризуется уникальными числами, входящими в него (позиция чисел не важна). Это задача для примера.

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub dasfsddsa()
    Dim MySet As New Collection
    Dim SetOfMySets As New Collection
    Dim N As Long, M As Long
    N = 5
 
    For i = 1 To N - 2
        For j = i + 1 To N - 1
            For k = j + 1 To N
                MySet.Add i
                MySet.Add j
                MySet.Add k
                SetOfMySets.Add MySet
                Set MySet = Nothing
            Next k
        Next j
    Next i
 
' Вывод результатов:
    For i = 1 To SetOfMySets.Count
        Set MySet = SetOfMySets(i)
        For j = 1 To MySet.Count
            Cells(i, j) = MySet(j)
        Next j
    Next i
End Sub
Вот что он возвращает:
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5


Как мне получить процедуру, которой можно было бы задавать, сколько вложенных циклов for будет выполнено? Т.е. не фиксированное число циклов (M=3 как в данном случае), а любое, меньшее N.

Добавлено через 45 минут
Решил поставленную задачу с помощью рекурсии.

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Sub dadasdsa()
    Dim N As Long, M As Long, SetOfMySets As Collection
    
    M = 3: N = 5
    
    Set SetOfMySets = StartInsertedFor(M, N)
    
 
    For i = 1 To SetOfMySets.Count
        Set MySet = SetOfMySets(i)
        For j = 1 To MySet.Count
            Cells(i, j) = MySet(j)
        Next j
    Next i
End Sub
 
Function StartInsertedFor(M As Long, N As Long) As Collection
    Dim i() As Long: ReDim i(1 To M)
    Dim SOMS As New Collection
    Call InsertedFor(i(), 1, N, SOMS)
    Set StartInsertedFor = SOMS
End Function
Sub InsertedFor(ByRef i() As Long, j As Long, N As Long, ByRef SOMS As Collection)
    Dim MySet As New Collection, k As Long, StartI As Long
    M = UBound(i)
    
    If j = 1 Then
        StartI = 1
    Else
        StartI = i(j - 1) + 1
    End If
 
    For i(j) = StartI To N - j + M
        If j = M Then
            For k = 1 To M
                MySet.Add i(k)
            Next k
            SOMS.Add MySet
            Set MySet = Nothing
        Else
            Call InsertedFor(i(), j + 1, N, SOMS)
        End If
    Next i(j)
End Sub
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2014, 12:35
Ответы с готовыми решениями:

Сравнение двух массивов без вложенных циклов
Извиняюсь, что помещаю здесь этот вопрос, я сам по идее должен был догадаться,...

Алгоритм реализуемый с помощью вложенных циклов типа ПОКА
Очень прошу помочь решить задачу. Брату задали 6 задач, 5 из них я написал, а...

Переменное количество вложенных циклов
есть код: a=0 for i1=1 to 4 for i2=1 to 4 for i3=1 to 4 for i4=1 to...

Произвольное количество вложенных циклов + рекурсия
Привет. Нужен код с++, который позволит вывести все комбинации цифр от 1 до k...

Как сделать неизвестное количество вложенных циклов?
в программу будет вводиться n-ное число, это самое число циклов со счетчиком,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2014, 12:35

Как найти максимальное количество вложенных циклов в C#?
У меня такая задача, сам код не могу предоставить потому что затрудняюсь, в...

Организация вложенных циклов
Ребята , очень нужна ваша помощь, не как не могу разобраться с задачей, не могу...

Программирование вложенных циклов
Дано целое число N и набор из N вещественных чисел: A1, A2, …, AN. Вывести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru