Maison > développement back-end > C++ > Trouver le joueur avec le moins de zéros après avoir vidé une chaîne binaire (en supprimant les sous-chaînes non vides)

Trouver le joueur avec le moins de zéros après avoir vidé une chaîne binaire (en supprimant les sous-chaînes non vides)

王林
Libérer: 2023-09-16 10:21:03
avant
856 Les gens l'ont consulté

Trouver le joueur avec le moins de zéros après avoir vidé une chaîne binaire (en supprimant les sous-chaînes non vides)

Dans cet article, nous aborderons un problème intéressant lié au domaine des opérations sur les chaînes et de la théorie des jeux : "Vider une chaîne binaire en supprimant les sous-chaînes non vides et trouver le joueur avec le moins de 0 restants". Cette question explore le concept d'utilisation de chaînes binaires pour les jeux compétitifs. Notre objectif est de trouver le joueur avec le moins de 0 restant à la fin de la partie. Nous discuterons de ce problème, fournirons une implémentation de code C++ et expliquerons le concept à travers un exemple.

Comprendre l'énoncé du problème

Deux joueurs reçoivent une chaîne binaire et jouent à tour de rôle. A chaque tour, le joueur supprime les sous-chaînes non vides contenant au moins un "1". Le jeu se termine lorsque la chaîne devient vide ou qu'il n'y a pas de "1" dans la chaîne. Les joueurs incapables d’agir perdent la partie. La tâche est de trouver le joueur avec le plus petit nombre de 0 finaux.

Méthode

Pour résoudre ce problème, nous devons compter le nombre de segments séparés par '0' qui ont au moins un '1'. Le joueur qui commence la partie choisit toujours le fragment avec le plus de « 1 ». Par conséquent, à moins que le nombre de fragments ne soit pair, le premier joueur peut toujours s'assurer qu'il enlève plus de « 1 » que le deuxième joueur. Dans ce cas, les deux joueurs peuvent retirer un nombre égal de « 1 ».

Implémentation C++

La traduction chinoise de

Exemple

est :

Exemple

Voici le code C++ pour implémenter la stratégie ci-dessus :

#include<bits/stdc++.h>
using namespace std;

int findWinner(string s) {
   int segments = 0;
   for (int i = 0; i < s.size();) {
      if (s[i] == '1') {
         segments++;
         while (i < s.size() && s[i] == '1') {
               i++;
         }
      }
      i++;
   }
   return segments % 2 == 0 ? 2 : 1;
}

int main() {
   string s = "100101";
   int winner = findWinner(s);
   cout << "Player " << winner << " wins";
   return 0;
}
Copier après la connexion

Sortie

Player 1 wins
Copier après la connexion

Ce code parcourt la chaîne, compte le nombre de segments, puis vérifie si le nombre de segments est pair ou impair pour décider du gagnant.

Cas de test

Considérons la chaîne binaire "100101". Les fragments de cette chaîne sont "1", "1" et "1". Puisque le nombre de pièces est un nombre impair, le premier joueur gagnera la partie car il est capable de retirer plus de « 1 » que le deuxième joueur.

Conclusion

Dans cet article, nous étudions le problème de trouver le joueur avec le moins de 0 après avoir vidé une chaîne binaire en supprimant les sous-chaînes non vides. Ce problème présente une intersection fascinante entre la manipulation des cordes et la théorie des jeux. Nous explorons le problème, décrivons une approche pour le résoudre, fournissons une implémentation de code C++ et développons le concept à l'aide d'exemples.

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!

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