Maison > développement back-end > C++ > le corps du texte

Nombre minimum de retournements de paires non adjacentes requis pour supprimer tous les zéros dans une chaîne binaire

WBOY
Libérer: 2023-09-04 13:09:06
avant
694 Les gens l'ont consulté

Nombre minimum de retournements de paires non adjacentes requis pour supprimer tous les zéros dans une chaîne binaire

Dans une chaîne binaire, retourner une paire de bits adjacents peut facilement supprimer un seul 0 de la chaîne. Cependant, lorsque nous devons supprimer tous les 0 d’une chaîne binaire, nous devrons peut-être également inverser des paires de bits non adjacentes. Dans cet article, nous verrons comment déterminer le nombre minimum de retournements de paires non adjacentes requis pour supprimer tous les 0 d'une chaîne binaire.

Algorithme

Pour résoudre ce problème, nous utiliserons un algorithme glouton simple. L’idée est de toujours choisir la paire de bits les plus éloignés les uns des autres et avoir au moins un 0 entre les deux. Nous pouvons ensuite inverser ces deux bits, supprimant ainsi un 0 de la chaîne. Nous répétons ce processus jusqu'à ce que tous les 0 aient été supprimés.

Implémentons maintenant cet algorithme en C++.

Exemple

#include <iostream>
#include <cstring>

using namespace std;

int main() {
   string s;
   s="100101000";
   int n = s.size();
   
   int cnt = 0;
   for (int i = 0; i < n; i++) {
      if (s[i] == '0') {
         cnt++;
         if (i+2 < n && s[i+2] == '0') {
            i += 2;
         }
         else {
            i++;
         }
      }
   }
   
   cout << cnt << endl;
   return 0;
}
Copier après la connexion

Sortie

3
Copier après la connexion

Description du code

Le code ci-dessus prend une chaîne binaire en entrée et calcule le nombre minimum de retournements de paires non adjacentes requis pour supprimer tous les 0 de la chaîne. Examinons maintenant le code en détail.

Tout d'abord, nous prenons une chaîne binaire en entrée et la stockons dans la variable chaîne "s". Nous stockons également la taille de la chaîne dans une variable entière "n".

string s;
cin >> s;
int n = s.size();
Copier après la connexion

Ensuite, nous initialisons la variable « cnt » pour stocker le nombre de 0 dans la chaîne. Nous parcourons ensuite la chaîne en utilisant une boucle for. Pour chaque 0 rencontré, nous incrémentons le nombre de 0 et vérifions si les deux bits suivants sont également des 0. Si c’est le cas, on retourne la paire de bits en augmentant l’index de 2. Sinon, nous retournons uniquement les paires de bits adjacentes en augmentant l'index de 1.

int cnt = 0;
for (int i = 0; i < n; i++) {
   if (s[i] == '0') {
      cnt++;
      if (i+2 < n && s[i+2] == '0') {
         i += 2;
      }
      else {
         i++;
      }
   }
}
Copier après la connexion

Enfin, nous affichons le nombre de retournements de paires non adjacents requis pour supprimer tous les 0 de la chaîne.

cout << cnt << endl;
Copier après la connexion

Exemple de cas de test

Considérons la chaîne binaire "100101000". Le nombre minimum de retournements de paires non adjacentes requis pour supprimer tous les 0 de cette chaîne peut être calculé à l'aide de l'algorithme ci-dessus.

Tout d’abord, nous rencontrons 0 en position 2. Nous retournons la paire (1,3) pour obtenir la chaîne "110101000". Ensuite, nous rencontrons le prochain 0 en position 5. Nous retournons la paire (1,7) pour obtenir la chaîne "111101000". Ensuite, nous rencontrons le prochain 0 en position 8. Nous retournons la paire (1,9) pour obtenir la chaîne "111111000". Désormais, tous les 0 ont été supprimés de la chaîne.

Le nombre de retournements de paires non adjacents requis pour supprimer tous les 0 d’une chaîne est de 3. Nous pouvons le vérifier en exécutant le code C++ ci-dessus sur la chaîne d'entrée "100101000".

Conclusion

Dans cet article, nous avons expliqué comment déterminer le nombre minimum de retournements de paires non adjacentes requis pour supprimer tous les 0 d'une chaîne binaire. Nous utilisons un algorithme glouton simple pour résoudre ce problème et l'implémentons dans le code C++. Nous fournissons également un exemple de cas de test pour illustrer le fonctionnement de l'algorithme.

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!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!