Kombinationen berechnen
-
Hi,
ich habe ein kleines Problemchen

Sagen wir ich habe eine Zahl 3. Nun möchte ich alle Zahlenkombinationen aus dieser 3 haben, z.B:
1
1,2
1,3
1,2,3
2
2,3
3,1Ich will das jede Kombinationen nur einmal vorkommt. Wenn ich schnon 1,2 habe, will ich nicht 2,1 haben. Wenn ich schon 1,2,3 habe will ich nicht 2,3,1 haben.
Die Reihenfolge ob 2,1 oder 1,2 ist egal.
Leider fehlt mir die Idee wie ich mir alle Kombinationen so wie ich sie haben will berechnen lassen kann.
Ich vermute mal das sind einige Schleifen in Schleifen, wobei ich auch denke das vielleicht Rekursion her muss. Bin mir aber nicht sicher.
Hat jemand eine Idee wie man dies einfach lösen könnte?
Phil
-
Das gibt dir alle Permutationen:
http://www.sgi.com/tech/stl/next_permutation.html
die musst dann noch um die symetrischen ausdünnen.
-
Oder von 0 bis 2^n (n Anzahl der Teile) zählen. Das i-te Bit sagt, ob Zahl i dabei ist oder nicht. Funktioniert aber nur, wenn alle Zahlen verschieden sind.
-
int Test[32]; void Print(int i) { int a; for(a=0;a<i;a++) printf(a+1<i?"%d,":"%d",Test[a]); printf("\n"); } void Kombi(int a,int pt) { while(a>0) { Test[pt]=a; Print(pt+1); Kombi(--a,pt+1); } } int main(int argc, char* argv[]) { Kombi(7,0); return 0; }