檢查是否可以透過在 C++ 中更改 1 位或 2 位來使給定的兩個數字相等。


在計算機程式設計領域,許多操作都圍繞數值進行。在某些情況下,可能需要確定修改幾位數字能否使兩個數字相等。雖然這個問題可能具有挑戰性,但正確的策略可以帶來成功的解決方案。

語法

為了建立理解演算法的堅實基礎,讓我們首先熟悉隨後使用此特定方法進行編碼中使用的語法。

bool checkEquality(int num1, int num2);

為了確定是否可以透過僅更改一位或兩位來使兩個給定的整數 num1 和 num2 相等,使用 checkEquality 函式生成布林響應。

演算法

以下是我們演算法的逐步分解:

  • 確定 num1 和 num2 的異或結果,並將輸出賦值給一個名為 xorResult 的新變數。

  • 使用該演算法計算 xorResult 中已設定位的數量,然後將結果賦值給名為 setBitCount 的變數。

  • 為了操作成功,setBitCount 必須不超過 2。在這種情況下,我們的函式將返回 true。如果它超過此指定閾值,我們可以得出結論,我們的輸出必須為 false。

  • 現在我們擁有了演算法,讓我們深入探討至少兩種不同的方法來解決這個問題。

方法 1:位操作

在這種方法中,我們將使用位操作來檢查是否可以使數字相等。

示例

#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;
}

輸出

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

解釋

提供的 C++ 程式碼直接檢查是否可以透過僅更改其中一位或兩位來使兩個給定數字相等。為此,程式碼定義了一個名為“checkEquality”的函式。此函式採用兩個整數作為輸入,並返回一個布林值,指示是否可以透過更改一位或兩位來使數字相等。

該程式使用異或運算來比較 checkEquality 方法中的兩個輸入整數。結果儲存在變數“xorResult”中。下一步的關鍵是計算 xorResult 和 xorResult - 1 之間的按位與運算的結果。如果結果為 0,則表示只需更改一位或兩位即可使數字相等,函式返回 true。否則,函式返回 false。程式提示使用者輸入兩個數字,然後將這些數字傳遞給 checkEquality 方法進行最終計算。計算完成後,程式將顯示一條訊息,指示是否可以透過更改一位或兩位來使數字相等。

方法 2:漢明距離法

在這種方法中,我們將使用漢明距離的概念來解決問題。

示例

#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;
}

輸出

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

解釋

在這個例子中,我們提供了一個 C++ 程式,該程式旨在確定我們是否可以更改一位或兩位以使兩個數字相等。此外,還有一個名為“countSetBits”的函式,它利用 Kernighan 演算法來確定整數中已設定位的數量。

在 checkEquality 函式中,程式碼計算兩個輸入數字的異或 (XOR) 並將其儲存在 xorResult 中。然後,它呼叫 countSetBits 函式來確定 xorResult 中已設定位的數量,並將結果累加到 setBitCount 中。如果 setBitCount 為 2 或更小,則表示只需更改一位或兩位即可使數字相等,函式返回 true。否則,它返回 false。

在主函式中,程式提示使用者輸入兩個數字。然後,它使用使用者提供的數字呼叫 checkEquality 函式並存儲結果。最後,根據結果的值,程式列印一條適當的訊息,指示是否可以透過僅更改一位或兩位來使數字相等。

此程式碼清楚地實現了該問題,利用 XOR 運算和 Kernighan 演算法有效地計算已設定位。

結論

我們的文章探討了確定兩個給定數字是否可以透過僅更改一位或兩位來使其相等的問題。為了解決這個問題,我們提出了兩種有效的方法——位操作方法和漢明距離方法。這兩種方法都為該問題提供了有效的解決方案。我們還根據這些方法提供了真實的可執行程式碼示例。透過理解和實現這些方法,您可以有效地檢查是否可以透過更改幾位數字來使兩個數字相等。

更新於:2023-7-25

瀏覽量:315

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.