使用 C++ 統計滿足條件的正數有序對的數量,要求兩個數的和為 S,異或值為 K


給定兩個數字 S 和 K。目標是找到滿足條件的有序正數對,要求兩個數的和為 S,異或值為 K。

我們將從 i=1 到 i<S-1 以及 j=i+1 到 j<S 進行遍歷。如果任意一對 (i,j) 滿足 sum==S 且 i^j==K(異或)。則將計數器加 2,因為 (i,j) 和 (j,i) 將被視為不同的對。

讓我們透過示例來理解。

輸入 

S=10 K=4

輸出 

Ordered pairs such that sum is S and XOR is K: 2

說明 

Pairs will be (3,7) and (7,3)

輸入 

S=12 K=6

輸出 

Ordered pairs such that sum is S and XOR is K: 0

說明 

No such pairs possible.

下面程式中使用的方案如下

  • 我們獲取整數 S 和 K。

  • 函式 sumXOR(int s, int k) 獲取 s 和 k 並返回和為 s 且異或為 k 的有序對的數量

  • 將初始變數 count 初始化為 0,用於統計對的數量。

  • 使用兩個 for 迴圈遍歷以生成對。

  • 從 i=1 到 i<s-1 開始。 以及 j=i+1 到 j<s-1。

  • 現在,對於每一對 (i,j),檢查 (i+j==s) && (i^j==k) 是否成立。如果成立,則將計數器加 2,因為 (i,j) 和 (j,i) 是不同的對。

  • 在所有迴圈結束後,count 將包含此類對的總數。

  • 返回 count 作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int sumXOR(int s, int k){
   int count = 0;
   for (int i = 1; i < s; i++){
      for(int j=i+1; j<s-1; j++){
         if( (i+j)==s && (i^j)==k){
            count+=2; //(i,j) and (j,i) are two pairs
         }
      }
   }
   return count;
}
int main(){
   int S = 9, K = 5;
   cout <<"Ordered pairs such that sum is S and XOR is K: "<< sumXOR(S,K);
   return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

Ordered pairs such that sum is S and XOR is K: 4

更新於: 2020-10-31

211 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告