C++ 中计算按位或小于 Max 的对数
给定一个整数数组,任务是计算可以使用给定数组值形成的对的总数,使得对上的 OR 操作将导致小于给定对中的 MAX 值。
OR 操作的真值表如下所示
A | B | A 或 B |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
输入 − int arr[] = {2, 5, 1, 8, 9}
输出 − 按位或小于 Max 的对数为 − 3
解释 −
X | Y | X 或 Y |
2 | 5 | 7>5=FALSE |
2 | 1 | 3>2=FALSE |
2 | 8 | 10>8=FALSE |
2 | 9 | 11>9=FALSE |
5 | 1 | 5=5 TRUE |
5 | 8 | 13>8=FALSE |
5 | 9 | 13>9=FALSE |
1 | 8 | 9>8=FALSE |
1 | 9 | 10>9=FALSE |
8 | 9 | 9=9= TRUE |
下面程序中使用的方案如下
输入一个整数元素数组以形成对
计算数组的大小,将数据传递给函数以进行进一步处理
创建一个临时变量 count 来存储形成的对,这些对的 OR 操作的值小于或等于对中的 MAX 值
从 i 为 0 开始到数组大小减 1 循环 FOR
在循环内,从 j 为 i+1 开始到数组大小循环 FOR
在循环内,检查 IF arr[i] | arr[j] <= max(arr[i], arr[j]) 然后将 count 加 1
返回 count
打印结果。
示例
#include <bits/stdc++.h> using namespace std; //Count pairs with bitwise OR less than Max int Pair_OR(int arr[], int size){ int count = 0; for (int i = 0; i lt; size - 1; i++){ for (int j = i + 1; j lt; size; j++){ if ((arr[i] | arr[j]) lt;= max(arr[i], arr[j])){ count++; } } } return count; } int main(){ int arr[] = { 4, 8, 9, 10, 23}; int size = sizeof(arr) / sizeof(arr[0]); cout<<"Count of pairs with bitwise OR less than Max are: "<<Pair_OR(arr, size); return 0; }
输出
如果我们运行以上代码,它将生成以下输出:
Count of pairs with bitwise OR less than Max are − 3
广告