PDA

Vollständige Version anzeigen : Kombinationen mit Bedingung


Eschl
10.07.2015, 07:56
Hallo,
mit den 15 Buchstaben a-o sollen Kombinationen mit je 5 Elementen erstellt werden. Bedingung: Die Quersumme der 5 Elemente soll genau 2,5 sein. Es gilt:
a=1/2; b=1/3; c=1/4; d=1/5; e=1/6
f=2/3; g=2/4; h=2/5; i=2/6
j=3/4; k=3/5; l=3/6
m=4/5; n=4/6; o=5/6
Lösung bitte mit VBA.
Kann mir jemand helfen?
Gruß, Eschl

xlph
10.07.2015, 08:02
Ist das eine Hausaufgabe?

Eschl
10.07.2015, 08:35
Nein, es ist Freizeitbeschäftigung, also keine erste Priorität!
Eschl

xlph
10.07.2015, 08:53
Hallo,

Public Sub xlph_Kombinationen()

Dim avntDaten() As Variant

Dim lngS1 As Long
Dim lngS2 As Long
Dim lngS3 As Long
Dim lngS4 As Long
Dim lngS5 As Long

Dim lngA As Long

Dim avntAusgabe() As Variant

Const conMatch As Double = 2.5


With Tabelle1

avntDaten() = .Range("A1").CurrentRegion.Resize(, 2)

ReDim avntAusgabe(1 To WorksheetFunction.Combin(UBound(avntDaten, 1), 5), 1 To 5)

Application.ScreenUpdating = False

.Range("E:I").ClearContents

For lngS1 = LBound(avntDaten, 1) To UBound(avntDaten, 1) - 4
For lngS2 = lngS1 + 1 To UBound(avntDaten, 1) - 3
For lngS3 = lngS2 + 1 To UBound(avntDaten, 1) - 2
For lngS4 = lngS3 + 1 To UBound(avntDaten, 1) - 1
For lngS5 = lngS4 + 1 To UBound(avntDaten, 1)

If avntDaten(lngS1, 2) + avntDaten(lngS2, 2) + avntDaten(lngS3, 2) + _
avntDaten(lngS4, 2) + avntDaten(lngS5, 2) = conMatch Then

lngA = lngA + 1
avntAusgabe(lngA, 1) = avntDaten(lngS1, 1)
avntAusgabe(lngA, 2) = avntDaten(lngS2, 1)
avntAusgabe(lngA, 3) = avntDaten(lngS3, 1)
avntAusgabe(lngA, 4) = avntDaten(lngS4, 1)
avntAusgabe(lngA, 5) = avntDaten(lngS5, 1)

End If

Next
Next
Next
Next
Next

If lngA > 0 Then
.Range("E1").Resize(lngA, UBound(avntAusgabe, 2)).Value = avntAusgabe
End If

End With

End Sub

Eschl
10.07.2015, 10:40
Hallo xlph,
danke für das schnelle Makro. Das war der erste Schritt des Lösungsweges. Am Ende soll die Anzahl der Möglichkeiten gefunden werden, unterschiedliche 3er Gruppen zu bilden.
Beispiel: abcfj degmo hikln.
Auf anderem Wege habe ich 348 solcher Gruppen gefunden. Leider sind einige Doppler dabei.
Zeile 001 abcfj degmo hikln
Zeile 012 abcfj hikln degmo
Diese Gruppen sind nicht UNTERSCHIEDLICH, bloß permutiert. Wie kann man die Doppler eliminieren?
Gruß, Eschl

xlph
10.07.2015, 12:36
Hallo,

jede Zeile sortieren und dann 'Duplikate entfernen' anwenden.