給定三個長度為 N 的二進位序列 A、B 和 C。每個序列代表一個 二進制數。我們必須找到沒有。 A 和 B 中的位元所需的翻轉次數,使得 A 和 B 的 XOR 得到 C。 A XOR B 變成 C。
首先讓我們了解XOR 運算的真值表-
#X | Y | X XOR Y |
---|---|---|
0 | 0 | #0 |
#1 | 1 |
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[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中文網其他相關文章!