Ich möchte Permutationen einer Folge von 5 0s erzeugen, gefolgt von den Permutationen von 4 0s und einer einzigen 1, gefolgt von den Permutationen von 3 0s mit 2 1s usw.? Mein Code ist wie folgt:
%Vor%Die Ausgabe ist also
%Vor%Die Ausgabe ist in Ordnung. In meinem Code verwende ich jedoch verschiedene Schleifen für verschiedene Fälle. Ist es möglich, einen besseren Ansatz zu verwenden? die Länge des Codes ist reduziert?
Sie können eine rekursive Funktion wie folgt verwenden - Sie müssen das Ergebnis nicht ausdrucken, wenn Sie fertig sind, Sie könnten es zu einer Liste hinzufügen usw.
Die Funktion beginnt mit einer leeren Zeichenfolge. Bei jedem Schritt fügen Sie ein weiteres Zeichen hinzu - in diesem Fall fügen Sie entweder 0
oder 1
hinzu.
Wenn ein 1
hinzugefügt wird, berücksichtigen wir dies, indem wir den Wert ones
beim nächsten Aufruf der Funktion dekrementieren. (In einem allgemeineren Fall könnten Sie eine Liste aller Elemente übergeben, die permutiert werden sollen - der Prozess würde dann aus dieser Liste auswählen, sie zu Ihrer Permutation hinzufügen und sie aus der Liste entfernen. Sie wiederholen dies, bis die Liste leer ist und Sie haben alle Elemente in der Liste permutiert.)
Wenn die Saite die gewünschte Länge erreicht hat, sind wir fertig und kehren zurück.
%Vor%Die Ausgabe sieht folgendermaßen aus:
%Vor% Schließlich, wenn Sie C nicht wirklich lernen wollen / brauchen, würde ich C ++ empfehlen, weil Sie wirklich nette Funktionen wie std::vector
und std::set
und so viele andere Dinge bekommen, die Ihr Leben so viel einfacher machen werden . Ich hätte das in C ++ komplett anders geschrieben.
Tags und Links c