计算正数的有序对,以便在C ++中它们的和为S,异或为K

我们给了两个数字S和K。目标是找到有序的正数对,使得它们的和为S,XOR为K。

我们将从i = 1到i <S-1,从j = i + 1到j <S开始。如果任何一对(i,j)的总和== S并且i ^ j == K(XOR)。然后将递增计数加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并返回具有sum = s和xor = k的有序对的计数

  • 对的初始变量计数为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)都是不同的对。

  • 在所有循环结束时,计数将包含此类对的总数。

  • 返回计数结果。

示例

#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
猜你喜欢