Maison >développement back-end >C++ >Minimisez le nombre d'échanges de caractères avec le même index afin que la somme des valeurs ASCII des caractères des deux chaînes soit un nombre impair

Minimisez le nombre d'échanges de caractères avec le même index afin que la somme des valeurs ASCII des caractères des deux chaînes soit un nombre impair

王林
王林avant
2023-09-23 17:41:04700parcourir

Minimisez le nombre déchanges de caractères avec le même index afin que la somme des valeurs ASCII des caractères des deux chaînes soit un nombre impair

Dans cet article, nous abordons un problème fascinant de la manipulation de chaînes et du codage de caractères en informatique. La tâche actuelle consiste à minimiser le nombre d'échanges entre les caractères identiquement indexés de deux chaînes de telle sorte que la somme des valeurs ASCII des caractères des deux chaînes soit un nombre impair. Nous résolvons ce problème en utilisant C++, un langage de programmation puissant et polyvalent privilégié par de nombreux développeurs de logiciels.

Comprendre l'ASCII

ASCII est l'abréviation de American Standard Code for Information Interchange et est une norme de codage de caractères pour les communications électroniques. Les codes ASCII représentent le texte dans les ordinateurs, les équipements de télécommunications et autres appareils utilisant du texte.

Énoncé du problème

Nous avons deux cordes de longueur égale. Le but est d'effectuer le minimum d'échange de caractères à la même position dans les deux chaînes afin que la somme des valeurs ASCII des caractères de chaque chaîne soit un nombre impair.

Solution

  • Calculer la somme ASCII Calculez la somme des valeurs ASCII pour chaque chaîne. Ensuite, vérifiez si la somme est paire ou impaire.

  • Déterminer les conditions d'échange Si la somme est déjà un nombre impair, aucun échange n'est requis. Si la somme est paire, un échange est requis.

  • Trouvez les échanges correspondants Trouvez les caractères dans deux chaînes pour lesquels l'échange produirait une somme impaire. Suivez le nombre d’échanges.

  • Résultat du retourRenvoyer le nombre minimum d'échanges requis.

Exemple

Voici le code modifié adapté à tous les scénarios -

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

int minSwaps(string str1, string str2) {
   int len = str1.length();
   int ascii_sum1 = 0, ascii_sum2 = 0;
   
   for (int i = 0; i < len; i++) {
      ascii_sum1 += str1[i];
      ascii_sum2 += str2[i];
   }
   
   // If total sum is odd, it's impossible to have both sums odd
   if ((ascii_sum1 + ascii_sum2) % 2 != 0) return -1;
   
   // If both sums are odd already, no swaps are needed
   if (ascii_sum1 % 2 != 0 && ascii_sum2 % 2 != 0) return 0;
   
   // If both sums are even, we just need to make one of them odd
   if (ascii_sum1 % 2 == 0 && ascii_sum2 % 2 == 0) {
      for (int i = 0; i < len; i++) {
         // If we find an odd character in str1 and an even character in str2, or vice versa, swap them
         if ((str1[i] - '0') % 2 != (str2[i] - '0') % 2) return 1;
      }
   }

   // If we reach here, it means no eligible swaps were found
    return -1;
}

int main() {
   string str1 = "abc";
   string str2 = "def";
   
   int result = minSwaps(str1, str2);
   if(result == -1) {
      cout << "No valid swaps found.\n";
   } else {
      cout << "Minimum swaps required: " << result << endl;
   }
   
   return 0;
}

Sortie

No valid swaps found.

Instructions

Considérez deux chaînes -

str1 = "abc", str2 = "def"

Nous calculons la somme ASCII de str1 (294 : a = 97, b = 98, c = 99) et str2 (303 : d = 100, e = 101, f = 102). La somme ASCII est 597, ce qui est un nombre impair. Par conséquent, il est impossible que les deux sommes soient impaires et le programme affichera « Aucun échange valide trouvé ».

La solution résout efficacement le problème en utilisant des structures de programmation simples et un raisonnement logique.

Conclusion

Minimiser les échanges pour obtenir des sommes impaires de valeurs ASCII est un problème intéressant qui améliore notre compréhension de la manipulation de chaînes, du codage de caractères et des compétences en résolution de problèmes. Les solutions fournies utilisent le langage de programmation C++ et montrent comment gérer différents scénarios dans l'énoncé du problème.

Une chose à noter est que cette solution suppose que les deux chaînes sont de la même longueur. Si vous ne le faites pas, vous aurez besoin d'une logique supplémentaire pour gérer cette situation.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer