Permutationen ausgeben



  • Hi@,

    vorab: Ja es ist eine Hausaufgabe, für einen Wink in die richtige Richtung wäre ich aber wirklich dankbar.

    Es sollen "einfach" alle Permutationen der Ziffern 1,2,3,4 mittels (verschachtelter?) Schleifen ausgegeben werden. Benutzt werden nur Schleifen Variablen und evtl. Kontrollstrukturen, keine Funktionen (next_permutation, swap, etc.).

    Was ich bisher gemacht habe ist 4 for Schleifen verschachtelt und in der innersten die 4 Variablen ausgegeben was aber eher trial and error war und obv. nur alle möglichen Kombinationen ausgibt:

    for (a = 1; a < 5; a++)
    {
    	for (b = 1; b < 5; b++)
    	{
     	        for (c = 1; c < 5; c++)
     		{
    			for (d = 1; d < 5; d++)
    			cout << a << b << c << d << endl;
    			}
     		}
    	}
    }
    

    Dann habe ich versucht mit Hilfsvariablen (h, i , j, k, l, m) Zeile für Zeile zu tauschen, denke aber dass das nicht Sinn der Sache sein kann, fühlt sich irgendwie nach besserem cout an und schafft auch nicht den richtigen Übergang zum 2. Schleifendurchlauf:

    for (a = 1; a < 5; a++)
    	{
    		h = d;
    		d = c;
    		c = h;
    		cout << a << b << c << d << endl;
    		i = d;
    		d = c;
    		c = b;
    		b = i;
    		cout << a << b << c << d << endl;
    		j = d;
    		d = c;
    		c = j;
    		cout << a << b << c << d << endl;
    		k = c;
    		c = d;
    		d = b;
    		b = k;
    		cout << a << b << c << d << endl;
    		l = d;
    		d = c;
    		c = l;
    		cout << a << b << c << d << endl;
    		m = b;
    		b = a;
    		d = m;
    		cout << a << b << c << d << endl;
    	}
    

    Was ich außerdem gesehen habe es werden c und d getauscht, dann b, c, d linksherum, danach wieder c und d, dann b, c, d rechtsherum usw. usf..
    Bevor ich hier aber weitermache - muss ich evtl. switch - case benutzen?

    Ergebnis soll sein:

    1, 2, 3, 4
    1, 2, 4, 3
    1, 3, 2, 4
    1, 3, 4, 2
    1, 4, 2, 3
    1, 4, 3, 2
    2, 1, 3, 4
    2, 1, 4, 3
    2, 3, 1, 4
    2, 3, 4, 1
    2, 4, 1, 3
    2, 4, 3, 1
    3, 1, 2, 4
    3, 1, 4, 2
    3, 2, 1, 4
    3, 2, 4, 1
    3, 4, 1, 2
    3, 4, 2, 1
    4, 1, 2, 3
    4, 1, 3, 2
    4, 2, 1, 3
    4, 2, 3, 1
    4, 3, 1, 2
    4, 3, 2, 1

    Ty für jede Hilfe, lasst mich nicht aufs Tutorium warten 😃



  • Dein erster Ansatz mit den vier Schleifen ist schon gut. Überleg dir einfach welche "Fehler" dabei noch auftreten. Diese "Fehler" fasst du dann als Sonderfälle auf.



  • Hallo hiat,

    Willkommen im C++-Forum.

    hiat schrieb:

    for (a = 1; a < 5; a++)
    {
    	for (b = 1; b < 5; b++)
    	{
    

    .. was passiert jetzt an dieser Stelle, wenn a==b ist? Das ist doch ein Fall, der nicht zur Permutation dazu gehört - was sollte man hier also tun?

    Gruß
    Werner


Log in to reply