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
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.
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.
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.
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 retour−Renvoyer le nombre minimum d'échanges requis.
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; }
No valid swaps found.
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.
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!