使用 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
广告