Это мое решение с массивами vba
Private Sub UserForm_Initialize()
Dim matriz_origen() As Variant
Dim matriz_destino() As Variant
Dim n As Long
Dim k As Long
n = 6
k = 2
Call combinatoria(matriz_origen, matriz_destino, n, k)
'Def titulo
Title = "Matriz Combinatoria"
'FUnction Calling
Call despliegue_2D(matriz_destino, Style, Title)
End Sub
Function combinatoria(matriz() As Variant, comb As Long, _
matriz_origen() As Variant, matriz_destino() As Variant, _
n As Long, k As Long)
'This function is calculating all possible combinations.
comb = Application.WorksheetFunction.Combin(n, k) 'Sin repeticion
ReDim matriz_origen(1 To n, 1 To k)
'Loops
For j = 1 To k
For i = 1 To n
matriz_origen(i, j) = i
Next i
Next j
ReDim matriz_destino(1 To comb, 1 To k) 'comb
If (k = 2) Then
cont1 = 1
'Loops
For j = 1 To k - 1
pos1 = j + 1
For i = 1 To n
For iter1 = 1 To n
If matriz_origen(i, j) < matriz_origen(iter1, pos1) Then
matriz_destino(cont1, j) = matriz_origen(i, j)
matriz_destino(cont1, pos1) = matriz_origen(iter1, j)
cont1 = cont1 + 1
End If
Next iter1
Next i
Next j
End If
If (k = 3) Then
cont1 = 1
'Loops
For j = 1 To k - 2
pos1 = j + 1
pos2 = j + 2
For i = 1 To n
For iter1 = 1 To n
If matriz_origen(i, j) < matriz_origen(iter1, pos1) Then
For iter2 = 1 To n
If matriz_origen(iter1, pos1) < matriz_origen(iter2, pos2) Then
matriz_destino(cont1, j) = matriz_origen(i, j)
matriz_destino(cont1, pos1) = matriz_origen(iter1, j)
matriz_destino(cont1, pos2) = matriz_origen(iter2, j)
cont1 = cont1 + 1
End If
Next iter2
End If
Next iter1
Next i
Next j
End If
If (k = 4) Then
cont1 = 1
'Loops
For j = 1 To k - 3
pos1 = j + 1
pos2 = j + 2
pos3 = j + 3
For i = 1 To n
For iter1 = 1 To n
If matriz_origen(i, j) < matriz_origen(iter1, pos1) Then
For iter2 = 1 To n
If matriz_origen(iter1, pos1) < matriz_origen(iter2, pos2) Then
For iter3 = 1 To n
If matriz_origen(iter2, j) < matriz_origen(iter3, pos1) Then
matriz_destino(cont1, j) = matriz_origen(i, j)
matriz_destino(cont1, pos1) = matriz_origen(iter1, j)
matriz_destino(cont1, pos2) = matriz_origen(iter2, j)
matriz_destino(cont1, pos3) = matriz_origen(iter3, j)
cont1 = cont1 + 1
End If
Next iter3
End If
Next iter2
End If
Next iter1
Next i
Next j
End If
End Function
Function despliegue_2D(matriz() As Variant, Style As String, Title As String)
'Esta funcion permite el despliegue de un arreglo multidimentinal de 2 dimensiones.
'Declaration
Dim msg As String
Dim iter1 As Integer, iter2 As Integer
'Declaration
filas = UBound(matriz, 1)
columnas = UBound(matriz, 2)
'Loops
For iter1 = 1 To filas
For iter2 = 1 To columnas
msg = msg & matriz(iter1, iter2) & vbTab
Next iter2
msg = msg & vbCrLf
Next iter1
Response = MsgBox(msg, Style, Title)
End Function
person
user16004582
schedule
23.05.2021
For Next
. - person Jean-François Corbett   schedule 26.08.2011For Next
loops при r=2. Шесть, когда r=6. И я понятия не имею, как вложить циклы rFor Next
, если r является переменной. (на самом деле я делаю: рекурсия) - person Joubarc   schedule 26.08.2011