Wieviele Möglichkeiten gibt es?

chillerStudent

Bekanntes Mitglied
Guten Tag lieber Helfer,

ich muss ein Programm schreiben, dass bei der Eingabe (Kommandozeilenparameter) mir alle Permutationen ausgibt. Zum Beispiel:

Eingabe: abcd

Ausgabe:

abcd
dc
cbd
db
dbc
cb
bacd
dc
cad
da
dac
ca
cabd
db
bad
da
dab
ba
dabc
cb
bac
ca
cab
ba

Ich möchte dieses Programm gerne hier zusammen erstellen. Noch hab ich nichts dazu geschrieben. Ich brauche Hilfe beim Ansatz. Reicht hier ein Array? und ist es besser wenn ich mit char programmiere oder mit String, also mit StringBuffer ?
Kann mir hier jemand in Worten erklären wie ich anfangen kann/soll ?

Danke schon mal an alle die mir helfen werden.
 

chillerStudent

Bekanntes Mitglied
{c,d} ist aber keine Permutation von {a,b,c,d}

sry sry. Also da wo leezeichen davor sind kommt immer ein Buchstabe.

Code:
abcd
   dc    // von hier...
 cbd
   db
 dbc
   cb    // bis hier kommt ein [B]a[/B] davor
bacd
   dc    // von hier...
 cad
   da
 dac
  ca    // bis hier kommt ein [B]b[/B] davor usw.
cabd
   db
 bad
   da
 dab
   ba
dabc
   cb
 bac
   ca
 cab
   ba
 

chillerStudent

Bekanntes Mitglied

Danke für den link. Aber leider kann ich noch nicht mit implements umgehen und sind auch nicht erwünscht.

so hab ich angefangen:

Java:
public static void main(String[] args) {
		
		int fac = fact(args.length);
		
		int[] a = new int[fac];


	}
	static int fact(int n) {
		int akku = 1;
		while (n != 1) {
		akku *= n;
		--n;
		}
		return akku;
		}

Die Idee ist, dass ein Buchstabe weggedacht wird (im Beispiel a) und mit dem Rest (im Beispiel bcd) die Ausgabe erzeugt wird. Dann soll b weggedacht werden und mit acd permutiert werden. Zum Schluss einfach der weggedachte Buchstabe dazudenken. :autsch:
 
Zuletzt bearbeitet:

njans

Top Contributor
Du kannst es auch iterativ machen. Dabei ist das Vorgehen recht "simpel":
Du betrachtest den String als eine Menge an Elementen und bildest alle Kombinationen von jedem Element mit jedem Anderen.
Diese neuen Elemente kombinierst du dann wieder mit allen Elementen. Diesen Vorgang machst du so lange, bis du alel Elemente der länge "abc".length hast.
So bekommst du auf jeden Fall alle Teilmengen, sofern das auch gewünscht ist.
 

chillerStudent

Bekanntes Mitglied
Du kannst es auch iterativ machen. Dabei ist das Vorgehen recht "simpel":
Du betrachtest den String als eine Menge an Elementen und bildest alle Kombinationen von jedem Element mit jedem Anderen.
Diese neuen Elemente kombinierst du dann wieder mit allen Elementen. Diesen Vorgang machst du so lange, bis du alel Elemente der länge "abc".length hast.
So bekommst du auf jeden Fall alle Teilmengen, sofern das auch gewünscht ist.

meinst du so?

Java:
	public static void main(String[] args) {

		String st = "";
		for(int i=0; i<args.length; i++) {
		    st += args[i];
		}
		char[] a = st.toCharArray();
		
		StringBuffer b = new StringBuffer();
		
		for(int i=0; i<a.length; i++){
			b.append(a[i]);
		}
		
	}

aber wie bilde ich die kombination?
 

chillerStudent

Bekanntes Mitglied
Ich hab nun das Programm "geschrieben", mit Hilfe von google. Allerdings muss es genau diese Reihenfolge eingehalten werden:
Alle Kombinationen mit dem Anfangsindex 'a' müssen zu erst ausgegeben werden, dann alle dem Anfangsindex 'b' usw.

Also es soll exakt das hier ausgeben:

Code:
abcd
   dc    // von hier...
 cbd
   db
 dbc
   cb    // bis hier kommt ein [B]a[/B] davor
bacd
   dc    // von hier...
 cad
   da
 dac
  ca    // bis hier kommt ein [B]b[/B] davor usw.
cabd
   db
 bad
   da
 dab
   ba
dabc
   cb
 bac
   ca
 cab
   ba

Es ist aber nicht wichtig, ob die Anfangsbuchstaben davor stehen oder nicht. Im Beispiel ist es übersichtshalber so ausgegeben.

Hier ist die die methode print:

Java:
static void print(char[] a) {
    	if( a[0] == 'a'){
    		a[0] = ' ';
    	}
    	System.out.println(String.valueOf(a));
    }
 

Michael...

Top Contributor
Ich hab nun das Programm "geschrieben", mit Hilfe von google. Allerdings muss es genau diese Reihenfolge eingehalten werden:
Und wie sieht der Code aktuell aus? Wenn man das mit Rekursion löst, bekommt man "automatisch" eine solche Ausgabe.
Es ist aber nicht wichtig, ob die Anfangsbuchstaben davor stehen oder nicht. Im Beispiel ist es übersichtshalber so ausgegeben.

Hier ist die die methode print:

Java:
static void print(char[] a) {
    	if( a[0] == 'a'){
    		a[0] = ' ';
    	}
    	System.out.println(String.valueOf(a));
    }
Was ist an der Ausgabe übersichlicher? es ist doch besser zu erkennen, wenn alle Buchstaben ausgegeben werden. Und die print ist Schmarrn. Hier werden Daten verändert (eventuell macht es ja nichts aus) und falls an erster Stelle ein 'a' steckt wird ein Leerzeichen ausgeben. Das soll es wohl nicht sein.
 

Michael...

Top Contributor
Man könnte die Ausgaben mitzählen und bei einem Vielfachen von (n-1)! den kompletten String ausgeben, bei allen anderen Ausgaben gibt man ein Leerzeichen und den String ab Index 1 aus.

wobei: n = Länge des Strings -1
 

Neue Themen


Oben