Maison >développement back-end >C++ >Divisez une chaîne binaire donnée en fonction d'une condition donnée en utilisant C++ pour maximiser la somme
Cet article vise à résoudre un problème algorithmique complexe impliquant la division d'une chaîne binaire de manière à maximiser la somme cumulée obtenue à partir de ses composants individuels. Nous fournirons au lecteur un aperçu syntaxique complet pour implémenter le code et suggérerons deux techniques possibles pour surmonter ce défi. De plus, nous montrerons deux vrais codes exécutables complets basés sur la méthode ci-dessus.
Avant d'approfondir l'algorithme, il est crucial que nous nous familiarisions avec la structure de la méthode spécifiée que nous démontrerons à travers les prochains exemples de code. Cette méthode prend une chaîne binaire en entrée et calcule sa valeur la plus élevée possible en partitionnant ladite entrée en utilisant des conditions prédéterminées. Voici à quoi ressemble cette approche syntaxiquement -
int maximizeSum(string binaryString) { // Implementation of the algorithm goes here }
Nous devrions maintenant discuter de l'algorithme pas à pas pour résoudre le problème de la maximisation de la somme en divisant une chaîne binaire.
Initialisez les deux variables "maxSum" et "currentSum", toutes deux mises à zéro.
Traversez une chaîne binaire de gauche à droite.
Pour chaque caractère de la chaîne -
Si le caractère est « 0 », ajoutez-le à la sous-chaîne actuelle.
Si le caractère est '1' −
Mettez à jour "maxSum" en ajoutant le "currentSum" actuel.
Réinitialisez `currentSum` à zéro.
Une fois le parcours terminé, ajoutez les "currentSum" et "maxSum" finaux.
Renvoyer `maxSum` comme résultat.
La première façon de résoudre ce problème consiste à implémenter l'algorithme ci-dessus. Regardons l'extrait de code correspondant -
#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
Pour plus de commodité, le code inclut d'abord les bibliothèques nécessaires ("iostream" et "string") et utilise l'espace de noms "std".
Pour calculer la somme maximale réalisable en divisant une chaîne binaire, vous pouvez utiliser la fonction `maximizeSum`, qui prend une chaîne binaire en entrée et renvoie la sortie.
Deux variables sont initialisées à l'intérieur de cette fonction - `maxSum` et `currentSum`. Le premier garde une trace de la valeur maximale atteinte jusqu'à présent, tandis que le second calcule la somme de chaque sous-chaîne individuelle.
À l'aide d'une boucle for basée sur une plage, nous parcourons chaque caractère "c" dans l'entrée "binaryString".
Si le caractère actuel "c" est "0", nous le multiplions par 10 et ajoutons la valeur "0" pour mettre à jour "currentSum". Cela ajoute effectivement "0" à la sous-chaîne actuelle.
Si le caractère actuel "c" est "1", cela signifie que la sous-chaîne actuelle se termine. Nous ajoutons `currentSum` à `maxSum` pour mettre à jour la somme maximale atteinte jusqu'à présent, puis réinitialisons `currentSum` à zéro pour démarrer une nouvelle sous-chaîne.
Après avoir terminé la boucle, elle est calculée en ajoutant le « currentSum » de la dernière sous-chaîne au « maxSum » précédent. La fonction « main » fournit une invite qui permet à l'utilisateur de saisir une chaîne binaire.
La fonction "main" fournit une invite qui permet à l'utilisateur de saisir une chaîne binaire.
La chaîne d'entrée est transmise à la fonction `maximizeSum` et la somme maximale renvoyée est stockée dans la variable `result`.
Enfin, la somme maximale est affichée à l'utilisateur.
Dans la deuxième approche, nous optimiserons le code en éliminant le besoin d'effectuer une multiplication d'entiers. Au lieu de cela, nous utiliserons des opérations au niveau du bit pour calculer la somme actuelle. Jetons un coup d'œil à l'extrait de code de cette approche -
#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
Semblable à la première méthode, le code inclut d'abord les bibliothèques nécessaires et utilise l'espace de noms `std`.
Les définitions de la fonction `maximizeSum` et de la fonction `main` sont les mêmes que celles de la première méthode.
Dans la fonction `maximizeSum`, utilisez l'opérateur de décalage vers la gauche (`
Équivaut à multiplier par 2. Ensuite, nous ajoutons 0 à `currentSum` puisque le caractère actuel est "0".
Le reste du code est le même dans les deux méthodes. Ils reçoivent une chaîne binaire en entrée. Utilisez la fonction `maximizeSum` pour calculer la somme maximale possible lors du fractionnement d'une chaîne. Ce résultat est ensuite présenté à l'utilisateur.
Vous pouvez compiler et exécuter ces codes dans le compilateur C++ Lorsqu'une chaîne binaire est entrée, le programme affichera la somme maximale obtenue en divisant la chaîne selon les conditions spécifiées.
Dans cet article, nous explorons le problème de la maximisation de la somme en divisant une chaîne binaire en fonction d'une condition donnée. Nous fournissons la syntaxe de la méthode utilisée dans l'exemple de code et proposons deux manières de résoudre le problème. Initialement, l'arithmétique directe a été utilisée, tandis que les techniques suivantes optimisent le codage via des opérations au niveau du bit. Bien que les deux méthodes résolvent le problème avec succès, la dernière offre une plus grande efficacité car elle élimine le besoin de multiplication d’entiers. En comprenant et en mettant en œuvre ces algorithmes, vous pouvez résoudre efficacement des problèmes similaires impliquant la maximisation d'une somme en divisant une chaîne binaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!