Heim  >  Artikel  >  Backend-Entwicklung  >  Überprüfen Sie, ob zwei gegebene Zahlen durch Ändern von 1 oder 2 Bits in C++ gleich gemacht werden können

Überprüfen Sie, ob zwei gegebene Zahlen durch Ändern von 1 oder 2 Bits in C++ gleich gemacht werden können

WBOY
WBOYnach vorne
2023-08-25 17:57:101055Durchsuche

Überprüfen Sie, ob zwei gegebene Zahlen durch Ändern von 1 oder 2 Bits in C++ gleich gemacht werden können

Im Bereich der Computerprogrammierung drehen sich viele Operationen um numerische Werte. In einigen Fällen müssen wir möglicherweise feststellen, ob zwei Zahlen durch Ändern einiger Bits gleich gemacht werden können. Auch wenn dieses Problem Herausforderungen mit sich bringen kann, führt die richtige Strategie zu einer erfolgreichen Lösung.

Grammatik

Um eine solide Grundlage für ein tiefes Verständnis des Algorithmus zu schaffen, machen wir uns zunächst mithilfe dieses spezifischen Ansatzes mit der Syntax vertraut, die bei der späteren Codierung verwendet wird.

bool checkEquality(int num1, int num2);

Generieren Sie eine boolesche Antwort, indem Sie die checkEquality-Funktion verwenden, um zu bestimmen, ob die beiden gegebenen Ganzzahlen num1 und num2 gleich gemacht werden können, indem nur ein oder zwei Bits geändert werden.

Algorithmus

Hier ist eine schrittweise Aufschlüsselung unseres Algorithmus:

  • Bestimmen Sie das XOR-Ergebnis von num1 und num2 und weisen Sie die Ausgabe einer neuen Variablen xorResult zu.

  • Verwenden Sie einen Algorithmus, um die Anzahl der gesetzten Bits in xorResult zu zählen und das Ergebnis einer Variablen namens setBitCount zuzuweisen.

  • Damit der Vorgang erfolgreich ist, darf setBitCount den Wert 2 nicht überschreiten. In diesem Fall gibt unsere Funktion ein wahres Ergebnis zurück. Wenn dieser angegebene Schwellenwert überschritten wird, können wir daraus schließen, dass unsere Ausgabe falsch sein muss.

  • Da wir nun den Algorithmus haben, wollen wir uns mit mindestens zwei verschiedenen Möglichkeiten befassen, dieses Problem zu lösen.

Methode 1: Bit-Operation

Bei dieser Methode verwenden wir Bitoperationen, um zu prüfen, ob die Zahlen gleich gemacht werden können.

Beispiel

#include <iostream>

bool checkEquality(int num1, int num2) {
   int xorResult = num1 ^ num2;
   int bitCheck = xorResult & (xorResult - 1);
   return (bitCheck == 0);
}

int main() {
   int number1, number2;
   std::cout << "Enter the first number: ";
   std::cin >> number1;
   std::cout << "Enter the second number: ";
   std::cin >> number2;
    
   bool result = checkEquality(number1, number2);
   if (result) {
      std::cout << "It is possible to make the numbers equal by changing only one or two bits." << std::endl;
   } else {
      std::cout << "It is not possible to make the numbers equal by changing only one or two bits." << std::endl;
   }  
   return 0;
}

Ausgabe

Enter the first number: Enter the second number: It is not possible to make the numbers equal by changing only one or two bits.

Erklärung

Durch Ändern des Werts eines oder zweier Bits führt der C++-Code eine einfache Prüfung durch, um festzustellen, ob während der Verarbeitung eine perfekte Ausrichtung zwischen den beiden bereitgestellten Werten hergestellt werden kann. Um dieses Ziel zu erreichen, besteht ein wichtiger Teil des Codes darin, eine spezielle Funktion namens „checkEquality“ zu definieren. Die Verwendung dieser benutzerdefinierten Funktion erfordert die Bereitstellung von zwei ganzzahligen Variablen als Eingabe. Der Ausgabetyp dieser speziellen Funktion verwendet boolesche Logik, sodass der Benutzer leicht ein Ergebnis erhalten kann, das angibt, ob die der Funktion zur Laufzeit bereitgestellten Argumente für eine perfekte numerische Ausrichtung ausreichen.

Zu Rechenzwecken verwendet dieses Programm den XOR-Algorithmus, um die oben genannten ganzzahligen Eingaben über die checkEquality-Methode zu vergleichen. Anschließend wird das automatisch gespeicherte Ergebnis in der Variablen „xorResult“ erfasst. Das Schlüsselelement im nächsten Schritt besteht darin, das bitweise UND-Zwischenergebnis zwischen xorResult und XORResult - 1 zu berechnen. Wenn in diesem Stadium der Rückgabewert „0“ ist, muss die Variable bitCheck übernommen werden. Da es anzeigt, dass eine notwendige Bedingung erfüllt ist, können wir davon ausgehen, dass ein oder zwei Bits in der Ganzzahleingabe geändert werden müssen, um die von der checkEquality-Funktion gestellte Anforderung zu erfüllen. Nach Abschluss fordert das Programm den Benutzer zur Eingabe auf, bevor die Parameter als letzte Berechnungsstufe an die checkEquality-Methode übergeben werden. Nach Abschluss des Prozesses zeigt eine Ausgabemeldung das Vorhandensein/Fehlen der erforderlichen Änderungen auf Bitebene an und eine entsprechende Meldung wird in der Konsolenausgabe angezeigt. Diese Implementierung zeigt ein hervorragendes Beispiel für bitweise Manipulation und XOR-Nutzung aus C++.

Methode 2: Hamming-Distanz-Methode

Bei dieser Methode verwenden wir das Konzept der Hamming-Distanz, um das Problem zu lösen.

Beispiel

#include <iostream>

int countSetBits(int num) {
   int count = 0;
   while (num) {
      num &= (num - 1);
      count++;
   }
   return count;
}

bool checkEquality(int num1, int num2) {
   int xorResult = num1 ^ num2;
   int setBitCount = countSetBits(xorResult);
   return (setBitCount <= 2);
}

int main() {
   int number1, number2;
   std::cout << "Enter the first number: ";
   std::cin >> number1;
   std::cout << "Enter the second number: ";
   std::cin >> number2;
    
   bool result = checkEquality(number1, number2);
   if (result) {
      std::cout << "It is possible to make the numbers equal by changing only one or two bits." << std::endl;
   } else {
      std::cout << "It is not possible to make the numbers equal by changing only one or two bits." << std::endl;
   }   
   return 0;
}

Ausgabe

Enter the first number: Enter the second number: It is not possible to make the numbers equal by changing only one or two bits.

Erklärung

In diesem Beispiel stellen wir ein C++-Programm bereit, mit dem ermittelt werden soll, ob wir Änderungen an einem oder möglicherweise zwei Bits vornehmen können, um zwei verschiedene Zahlen äquivalent zu machen. Darüber hinaus gibt es eine Funktion namens „countSetBits“, die den Kemighan-Algorithmus nutzt, um zu bestimmen, wie viele gesetzte Bits in einem ganzzahligen Wert vorhanden sind.

In der checkEquality-Funktion berechnet der Code das Exklusiv-ODER der beiden Eingabezahlen und speichert das Ergebnis in xorResult. Die vorherige Anweisung löst die Funktion countSetBits aus, um die Anzahl der in xorResult gesetzten Bits zu bestimmen, die dann in setBitCount akkumuliert werden. Wenn festgestellt wird, dass setBitCount zwei oder weniger beträgt, bedeutet dies, dass nur ein oder zwei Bits geändert werden müssen, um ein Gleichgewicht zu erreichen, wodurch die Funktion „true“ zurückgibt. Andernfalls wird false zurückgegeben.

In der Hauptfunktion fordert das Programm den Benutzer zur Eingabe von zwei Zahlen auf. Anschließend ruft es die checkEquality-Funktion mit der vom Benutzer angegebenen Nummer auf und speichert das Ergebnis. Abschließend gibt das Programm abhängig vom Wert des Ergebnisses eine entsprechende Meldung aus, die angibt, ob es möglich ist, die Zahlen durch Änderung eines oder zweier Bits gleich zu machen.

Dieser Code bietet eine klare Implementierung des Problems, indem er XOR-Operationen und den Kernighan-Algorithmus verwendet, um die gesetzten Bits effizient zu berechnen.

Fazit

Unser Artikel befasst sich mit dem Problem, festzustellen, ob zwei gegebene Zahlen gleich sein können, während sich nur ein oder zwei Bits ändern. Um dieses Problem zu lösen, schlagen wir zwei effektive Methoden vor: die Bitoperationsmethode und die Hamming-Distanzmethode. Beide Methoden bieten effiziente Lösungen. Wir stellen auch echte ausführbare Codebeispiele bereit, die auf diesen Methoden basieren. Durch das Verständnis und die Implementierung dieser Methoden können Sie effektiv prüfen, ob zwei Zahlen durch Ändern einiger Bits gleich gemacht werden können.

Das obige ist der detaillierte Inhalt vonÜberprüfen Sie, ob zwei gegebene Zahlen durch Ändern von 1 oder 2 Bits in C++ gleich gemacht werden können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen