मान लीजिए कि हमारे पास 3 धनात्मक संख्याएँ a, b और c हैं। हमें (a OR b ==c ) बनाने के लिए a और b के कुछ बिट्स में आवश्यक न्यूनतम फ़्लिप खोजने होंगे। यहां हम बिटवाइज या ऑपरेशन पर विचार कर रहे हैं।
फ्लिप ऑपरेशन में किसी एक बिट को 1 से 0 में बदलना या बिट 0 से 1 को उनके बाइनरी प्रतिनिधित्व में बदलना शामिल है। तो अगर a :0010 और b :=0110, तो c 0101 है, फ़्लिप के बाद, a 0001 होगा, और b 0100 होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- उत्तर:=0
- मैं के लिए 0 से 31 की सीमा में
- bitC :=(c / 2^i) और 1
- बिटा:=(ए / 2^i) और 1
- बिटबी:=(बी/2^i) और 1
- अगर (bitA या bitB) bitC के समान नहीं है, तो
- यदि बिटसी 0 है
- यदि बिटए =1 और बिटबी =1 है, तो उत्तर को 2 से बढ़ाएँ, अन्यथा उत्तर को 1 से बढ़ाएँ
- अन्यथा उत्तर को 1 से बढ़ाएं
- यदि बिटसी 0 है
- वापसी उत्तर
उदाहरण(C++)
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int minFlips(int a, int b, int c) {
int ans = 0;
for(int i = 0; i < 32; i++){
int bitC = (c >> i) & 1;
int bitA = (a >> i) & 1;
int bitB = (b >> i) & 1;
if((bitA || bitB) != bitC){
if(!bitC){
if(bitA == 1 && bitB == 1){
ans += 2;
}
else {
ans += 1;
}
}
else{
ans += 1;
}
}
}
return ans;
}
};
main(){
Solution ob;
cout << (ob.minFlips(2,6,5));
} इनपुट
2 6 5
आउटपुट
3