Alle Kombinationen von festgelegten Werten ausgeben

January

Mitglied
Hallo zusammen,

meine Frage hat zwar nicht explizit mit Java zu tun, da ich aber keine passende Kategorie gefunden habe und die Lösung in Java umsetzen will, jetzt also hier.

An folgenden Problem sitze ich nun schon eine ganze Weile und kommen nicht auf die Lösung:

Ich habe ein eine feste Anzahl von definieren Integer-Werten. In meinem Fall sind das
1,1,1,1,2,2,2,2,3,3,3,3.
Ich möchte jetzt aus diesen Werten alle möglichen Kombinationen bilden, so dass jeder Wert genau einmal vorkommt.
Meine Idee ist, die Werte in einem Ausgangs- Array zu speichern und eine Funktion eine Arraylist mir allen möglichen Arrays ausgeben zu lassen.
Ich habe in der Funktion versucht 1,1,1,1,2,2,2,2,3,3,3,3 als kleinstmögliche Zahl und 3,3,3,3,2,2,2,2,1,1,1,1 als größtmögliche Zahl zu begreifen und alle Zahlen (= Arrays) dazwischen auszugeben. Leider ohne Erfolg. Am ende komme ich nur auf Sortieralgorithmen a la Bubblesort.
Vielleicht kann mir ja jemand von euch einen Tipp geben in welchen Schleifen man ich wie swappen muss (oder eine ganz andere Lösung). Ich stehe anscheinden schon länger auf dem Schlauch.

Danke schon im Voraus!
January
 

raruk

Grünschnabel
Hallo,

Ich habe das letztes Jahr mal zu Übungszwecken so gemacht.
Hoffe es hilft dir! ;)

Code:
private int elementLevel = -1;
        private int numberOfElements;
        private int[] moeglichkeiten = new int[0];

        private char[] inputSet;
        public char[] InputSet
        {
            get { return inputSet; }
            set { inputSet = value; }
        }

        private int zaehler = 0;
        public int Zaehler
        {
            get { return zaehler; }
            set { zaehler = value; }
        }

        public char[] MakeCharArray(string InputString)
        {
            char[] charString = InputString.ToCharArray();
            Array.Resize(ref moeglichkeiten, charString.Length);
            numberOfElements = charString.Length;
            return charString;
        }

        public void CalcPermutation(int k)
        {
            elementLevel++;
            moeglichkeiten.SetValue(elementLevel, k);

            if( elementLevel == numberOfElements)
            {
                OutputPermutation(moeglichkeiten);
            }
            else
            {
                for (int i = 0;i< numberOfElements;i++)
                {
                    if( moeglichkeiten[i] == 0)
                    {
                        CalcPermutation(i);
                    }
                }
            }
            elementLevel--;
            moeglichkeiten.SetValue(0, k);
        }
            private void OutputPermutation(int[] value)
            {
                foreach ( int i in value)
                {
                    Console.Write(inputSet.GetValue(i-1));
                }
                Console.WriteLine();
                Zaehler++;
            }
 

January

Mitglied
Klar habe ich gegooglet. Ich wusste nur nicht, dass das was ich suche, Permutation heißt. Danke.Ich hoffe, dass ich es jetzt hinbekomme.

Hallo Rookie, danke, werde es damit mal versuchen.