Heim >Backend-Entwicklung >C++ >Teilen Sie eine bestimmte Binärzeichenfolge basierend auf einer bestimmten Bedingung mit C++ auf, um die Summe zu maximieren
Dieser Artikel zielt darauf ab, ein komplexes algorithmisches Problem zu lösen, bei dem es darum geht, eine Binärzeichenfolge so aufzuteilen, dass die kumulative Summe aus ihren einzelnen Komponenten maximiert wird. Wir stellen dem Leser eine umfassende Syntaxübersicht für die Implementierung des Codes zur Verfügung und schlagen zwei mögliche Techniken zur Bewältigung dieser Herausforderung vor. Darüber hinaus zeigen wir zwei echte, vollständig ausführbare Codes, die auf der oben genannten Methode basieren.
Bevor wir uns mit dem Algorithmus befassen, ist es wichtig, dass wir uns mit der Struktur der angegebenen Methode vertraut machen, die wir anhand der kommenden Codebeispiele demonstrieren werden. Diese Methode verwendet eine Binärzeichenfolge als Eingabe und berechnet ihren höchstmöglichen Wert durch Partitionierung dieser Eingabe unter Verwendung vorgegebener Bedingungen. So sieht dieser Ansatz syntaktisch aus –
int maximizeSum(string binaryString) { // Implementation of the algorithm goes here }
Jetzt sollten wir den schrittweisen Algorithmus diskutieren, um das Problem der Maximierung der Summe durch Aufteilen einer Binärzeichenfolge zu lösen.
Initialisieren Sie die beiden Variablen „maxSum“ und „currentSum“, beide auf Null gesetzt.
Durchlaufen Sie eine Binärzeichenfolge von links nach rechts.
Für jedes Zeichen in der Zeichenfolge -
Wenn das Zeichen „0“ ist, fügen Sie es der aktuellen Teilzeichenfolge hinzu.
Wenn das Zeichen „1“ ist −
Aktualisieren Sie „maxSum“, indem Sie die aktuelle „currentSum“ hinzufügen.
Setzen Sie „currentSum“ auf Null zurück.
Nachdem die Durchquerung abgeschlossen ist, fügen Sie die endgültige „currentSum“ und „maxSum“ hinzu.
Gib „maxSum“ als Ergebnis zurück.
Der erste Weg, dieses Problem zu lösen, besteht darin, den oben genannten Algorithmus zu implementieren. Schauen wir uns das entsprechende Code-Snippet an -
#include <iostream> #include <string> using namespace std; int maximizeSum(string binaryString) { int maxSum = 0; int currentSum = 0; for (char c : binaryString) { if (c == '0') { currentSum = currentSum * 10 + (c - '0'); } else { maxSum += currentSum; currentSum = 0; } } maxSum += currentSum; return maxSum; } int main() { string binaryString = "1001101001"; int result = maximizeSum(binaryString); cout << "Maximum sum: " << result << endl; return 0; }
Maximum sum: 0
Der Einfachheit halber enthält der Code zunächst die erforderlichen Bibliotheken („iostream“ und „string“) und verwendet den Namespace „std“.
Um die maximal erreichbare Summe durch Aufteilen einer Binärzeichenfolge zu berechnen, können Sie die Funktion „maximizeSum“ verwenden, die eine Binärzeichenfolge als Eingabe verwendet und die Ausgabe zurückgibt.
Zwei Variablen werden innerhalb dieser Funktion initialisiert – „maxSum“ und „currentSum“. Ersteres verfolgt den bisher erreichten Maximalwert, während letzteres die Summe jedes einzelnen Teilstrings berechnet.
Mit einer bereichsbasierten for-Schleife iterieren wir über jedes Zeichen „c“ in der Eingabe „binaryString“.
Wenn das aktuelle Zeichen „c“ „0“ ist, multiplizieren wir es mit 10 und addieren den Wert „0“, um „currentSum“ zu aktualisieren. Dadurch wird effektiv „0“ an den aktuellen Teilstring angehängt.
Wenn das aktuelle Zeichen „c“ „1“ ist, bedeutet dies, dass die aktuelle Teilzeichenfolge endet. Wir fügen „currentSum“ zu „maxSum“ hinzu, um die bisher erreichte Maximalsumme zu aktualisieren, und setzen dann „currentSum“ auf Null zurück, um einen neuen Teilstring zu beginnen.
Nach Abschluss der Schleife wird sie berechnet, indem die „currentSum“ des letzten Teilstrings zur vorherigen „maxSum“ addiert wird. Die Funktion „main“ stellt eine Eingabeaufforderung bereit, die es dem Benutzer ermöglicht, eine Binärzeichenfolge einzugeben.
Die Funktion „main“ stellt eine Eingabeaufforderung bereit, die es dem Benutzer ermöglicht, eine Binärzeichenfolge einzugeben.
Die Eingabezeichenfolge wird an die Funktion „maximizeSum“ übergeben und die zurückgegebene Maximalsumme wird in der Variablen „result“ gespeichert.
Abschließend wird dem Nutzer die maximale Summe angezeigt.
Im zweiten Ansatz optimieren wir den Code, indem wir die Notwendigkeit einer Ganzzahlmultiplikation überflüssig machen. Stattdessen verwenden wir bitweise Operationen, um die aktuelle Summe zu berechnen. Werfen wir einen Blick auf den Codeausschnitt dieses Ansatzes -
#include <iostream> #include <string> using namespace std; int maximizeSum(string binaryString) { int maxSum = 0; int currentSum = 0; for (char c : binaryString) { if (c == '0') { currentSum = (currentSum << 1) + 0; } else { maxSum += currentSum; currentSum = 0; } } maxSum += currentSum; return maxSum; } int main() { string binaryString = "10110010"; // Assumed binary string int result = maximizeSum(binaryString); cout << "Maximum sum: " << result << endl; return 0; }
Maximum sum: 0
Ähnlich wie bei der ersten Methode enthält der Code zunächst die erforderlichen Bibliotheken und verwendet den Namensraum „std“.
Die Definitionen der Funktion „maximizeSum“ und der Funktion „main“ sind die gleichen wie in der ersten Methode.
Verwenden Sie in der Funktion „maximizeSum“ den Bit-Linksverschiebungsoperator („
Entspricht einer Multiplikation mit 2. Dann addieren wir 0 zu „currentSum“, da das aktuelle Zeichen „0“ ist.
Der Rest des Codes ist bei beiden Methoden gleich. Als Eingabe erhalten sie einen Binärstring. Verwenden Sie die Funktion „maximizeSum“, um die maximal mögliche Summe beim Teilen einer Zeichenfolge zu berechnen. Dieses Ergebnis wird dann dem Benutzer präsentiert.
Sie können diese Codes im C++-Compiler kompilieren und ausführen. Wenn eine Binärzeichenfolge eingegeben wird, gibt das Programm die maximale Summe aus, die durch Teilen der Zeichenfolge gemäß den angegebenen Bedingungen erhalten wird.
In diesem Artikel untersuchen wir das Problem der Maximierung der Summe durch Aufteilen einer Binärzeichenfolge basierend auf einer bestimmten Bedingung. Wir stellen die Syntax der im Codebeispiel verwendeten Methode bereit und schlagen zwei Möglichkeiten zur Lösung des Problems vor. Ursprünglich wurde direkte Arithmetik verwendet, während die folgenden Techniken die Codierung durch bitweise Operationen optimieren. Obwohl beide Methoden das Problem erfolgreich lösen, bietet letztere eine höhere Effizienz, da keine ganzzahlige Multiplikation erforderlich ist. Durch das Verständnis und die Implementierung dieser Algorithmen können Sie ähnliche Probleme effizient lösen, bei denen es um die Maximierung einer Summe durch Aufteilen einer Binärzeichenfolge geht.
Das obige ist der detaillierte Inhalt vonTeilen Sie eine bestimmte Binärzeichenfolge basierend auf einer bestimmten Bedingung mit C++ auf, um die Summe zu maximieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!