हमें लंबाई N के तीन बाइनरी क्रम A, B और C दिए गए हैं। प्रत्येक क्रम एक बाइनरी नंबर का प्रतिनिधित्व करता है। हमें नहीं खोजना है। ए और बी में बिट्स के लिए आवश्यक फ़्लिप जैसे कि ए और बी के एक्सओआर का परिणाम सी होता है। ए एक्सओआर बी सी बन जाता है।
सबसे पहले हम XOR ऑपरेशन की ट्रुथ टेबल के बारे में सीखते हैं -
<टेबल><थेड>उपरोक्त तालिका से हम देखते हैं कि एक्स और वाई में समान मानों के लिए, एक्स एक्सओआर वाई परिणाम 0 और इसके परिणाम 1 हैं। तो यह बिट्स को ए और बी में सी तक पहुंचने के लिए फ़्लिप करने में मददगार होगा। मामले होंगे
- अगर A[i]==B[i] और C[i]==0 तो कोई फ्लिप नहीं,
- अगर A[i]==B[i] और C[i]==1 तो A[i] या B[i] में से किसी एक को पलटें और फ्लिप की संख्या को 1 से बढ़ाएं
- अगर A[i]!=B[i] और C[i]==0 तो A[i] या B[i] में से किसी एक को पलटें और फ्लिप की संख्या को 1 से बढ़ाएं
- यदि A[i]!=B[i] और C[i]==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
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
Arrays a[], b[] और c[] का उपयोग बाइनरी नंबर को स्टोर करने के लिए किया जाता है।
-
फंक्शन फ्लिपकाउंट (इंट ए [], इंट बी [], इंट सी [], इंट एन) एरे ए, बी, सी और उनकी लंबाई एन एसिनपुट लेता है और ए [] या बी [ के बिट्स में आवश्यक फ्लिप की गिनती देता है। ] C[] को A xorB के रूप में प्राप्त करने के लिए
-
वेरिएबल काउंट फ्लिप काउंट को दर्शाता है और 0 से इनिशियलाइज़ किया जाता है।
-
लूप के लिए उपयोग करना i =0 से i तक सेल में प्रत्येक बिट को पार करता है
-
प्रत्येक बिट ए [i] और बी [i] के लिए। यदि वे बराबर हैं और C[i] 1 वृद्धि गणना है।
-
प्रत्येक बिट ए [i] और बी [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