Permutation - Funktion



  • Hey habe eine Frage: soll ein Programm schreiben, das alle Permutationen einer Zahl ausgibt. Nun habe ich die Funktion geschrieben und sie funktioniert soweit auch. Allerdings nur mit 2 und 3 Zahlen. Ab 4 Zahlen wiederholen sich nach einer gewissen Anzahl die Zahlen;
    Wäre toll wenn mir wer einen Tipp geben könnte, was ich ändern soll.
    Achja und ich weiß, dass es eine Funktion in der Bibliothek gibt, aber wir sollen sie eben selber schreiben.

    void kombi(int arr[], int i) {
    	int zaehler=1;
    	int hilf = 0;
    	int *p=arr;
    	for (int k=0;k<i;k++)
    		cout << p[k];
    	cout << endl;
    	while (zaehler < fak(i))
    	{
    		if (*(p+1) == 0 || *p == 0)
    			p = arr;
    
    		else
    		{
    			hilf = *p;
    			*p = *(p+1);
    			*(p+1) = hilf;
    			for (int k=0;k<i;k++)
    				cout << arr[k];
    			cout << endl;
    			p = p+1;
    			zaehler++;
    		}
    	}
    }
    


  • Der Algorithmus ist schlicht und einfach komplett falsch. Da gibt es gar nichts, wo man sagen kann: Hier ist der Fehler. Du tauschst da anscheinend immer wieder von vorne nebeneinanderliegende Pärchen durch, aber das kann natürlich nie alle Permutationen generieren. Ich schlage vor, du denkst das nochmal von vorne durch.

    Dass dein Algorithmus eher auf der richtigen Seite liegt, erkennst du übrigens daran, dass sich die Anzahl auf natürliche Weise ergibt, und sowas wie while (zaehler < fak(i) nicht notwendig ist.



  • Ein weiteres Stichwort zur Hilfe: Rekursion


Log in to reply