使用 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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告