给定三个长度为 N 的二进制序列 A、B 和 C。每个序列代表一个 二进制数。我们必须找到没有。 A 和 B 中的位所需的翻转次数,使得 A 和 B 的 XOR 得到 C。A XOR B 变成 C。
首先让我们了解一下 XOR 运算的真值表 -
X | Y | X XOR Y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
从上表中我们观察到,对于相同的值在 X 和 Y 中,X XOR Y 结果为 0,否则 结果 1. 因此,这将有助于找到在A和B中翻转以达到C的位。情况将是
A[]= { 0,0,0,0 } B[]= { 1,0,1,0 } C= {1,1,1,1}
Required flips : 2
A[0] xor B[0] 0 xor 1 = 1 C[0]=1 no flip A[1] xor B[1] 0 xor 0 = 0 C[0]=1 flip count=1 A[2] xor B[2] 0 xor 1 = 1 C[0]=1 no flip A[3] xor B[3] 0 xor 0 = 0 C[0]=1flip count=2
A[]= { 0,0,1,1 } B[]= { 0,0,1,1 } C= {0,0,1,1}
Required flips : 2
A[0] xor B[0] 0 xor 0 = 0 C[0]=0 no flip A[1] xor B[1] 0 xor 0 = 0 C[0]=0 no flip A[2] xor B[2] 1 xor 1 = 0 C[0]=1 flip count=1 A[3] xor B[3] 1 xor 1 = 0 C[0]=1 flip count=2
数组a[]、b[]和c[]用于存储二进制数。< /p>
函数 FlipCount(int A[], int B[], int C[], int n) 将数组 a、b、c 及其长度 n 作为 输入并返回在A[]或B[]的位上需要翻转的次数,以使得C[]等于A异或B B
变量count表示翻转计数,初始化为0。
使用for循环遍历从i开始的单元格中的每一位= 0 到 i
对于每个位 A[i] 和 B[i]。如果它们相等且 C[i] 为 1,则增加计数。
对于每个位 A[i] 和 B[i]。如果它们不相等且 C[i] 为 0,则增加计数。
返回所需结果的计数。
现场演示
#include<bits/stdc++.h> using namespace std; int flipCount(int A[], int B[], int C[], int N){ int count = 0; for (int i=0; i < N; ++i){ // If both A[i] and B[i] are equal then XOR results 0, if C[i] is 1 flip if (A[i] == B[i] && C[i] == 1) ++count; // If Both A and B are unequal then XOR results 1 , if C[i] is 0 flip else if (A[i] != B[i] && C[i] == 0) ++count; } return count; } int main(){ //N represent total count of Bits int N = 5; int a[] ={1,0,0,0,0}; int b[] ={0,0,0,1,0}; int c[] ={1,0,1,1,1}; cout <<"Minimum bits to flip such that XOR of A and B equal to C :"<<flipCount(a, b, c,N); return 0; }
Minimum bits to flip such that XOR of A and B equal to C :2
以上是在C++中,将以下内容翻译为中文:计算最小的位翻转次数,使得A和B的异或结果等于C的详细内容。更多信息请关注PHP中文网其他相关文章!