Given three positives integers A, B, and** C**, the task is to count the minimum number of flipping of bits required in A and B, such that the Bitwise OR of A and B is equal to C or not.
Examples:
Input:_ A = 2, B = 2, C = 3_
Output:_ 1_
Explanation:
_The binary representation of A is 010, B is 010 and C is 011. _
Flip the 3rd bit of either A or B, such that A | B = C, i.e. 011 | 010 = 011.
Therefore, the total number of flips required is 1.
Input:_ A = 2, B = 6, C = 5_
Output:_ 3_
Approach: Follow the steps below to solve the problem:
Below is the implementation of the above approach:
// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to count the number of
// bit flips required on A and B
// such that Bitwise OR of A and B is C
int minimumFlips(
int A,
int B,
int C)
{
// Stores the count of flipped bit
int res = 0;
// Iterate over the range [0, 32]
for (
int i = 0; i < 32; i++) {
int x = 0, y = 0, z = 0;
// Check if i-th bit of A is set
if (A & (1 << i)) {
x = 1;
}
// Check if i-th bit of B is
// set or not
if (B & (1 << i)) {
y = 1;
}
// Check if i-th bit of C is
// set or not
if (C & (1 << i)) {
z = 1;
}
// If i-th bit of C is unset
if (z == 0) {
// Check if i-th bit of
// A is set or not
if (x) {
res++;
}
// Check if i-th bit of
// B is set or not
if (y) {
res++;
}
}
// Check if i-th bit of C
// is set or not
if (z == 1) {
// Check if i-th bit of
// both A and B is set
if (x == 0 && y == 0) {
res++;
}
}
}
// Return the count
// of bits flipped
return res;
}
// Driver Code
int main()
{
int A = 2, B = 6, C = 5;
cout << minimumFlips(A, B, C);
return 0;
}
#bit magic #greedy #mathematical #c