Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में a OR b को c के बराबर बनाने के लिए न्यूनतम फ्लिप्स

मान लीजिए हमारे पास 3 पॉजिटिव नंबर a, b और c हैं। हमें a और b के कुछ बिट्स में आवश्यक न्यूनतम फ्लिप्स ढूंढने हैं ताकि (a OR b == c) हो जाए। यहां हम बिटवाइज OR ऑपरेशन पर विचार कर रहे हैं।

फ्लिप ऑपरेशन में किसी भी सिंगल बिट को 1 से 0 या 0 से 1 में उनके बाइनरी प्रतिनिधित्व में बदलना शामिल है। उदाहरण के लिए यदि a: 0010 और b: 0110 है, तो c 0101 है, फ्लिप्स के बाद a 0001 होगा, और b 0100 होगा।

समाधान दृष्टिकोण

  • ans := 0
  • i को 0 से 31 तक रेंज में लूप करें:
    • bitC := (c >> i) AND 1
    • bitA := (a >> i) AND 1
    • bitB := (b >> i) AND 1
    • यदि (bitA OR bitB) bitC के समान नहीं है, तो:
      • यदि bitC 0 है:
        • यदि bitA = 1 और bitB = 1, तो ans को 2 से बढ़ाएं, अन्यथा ans को 1 से बढ़ाएं
      • अन्यथा ans को 1 से बढ़ाएं
  • ans वापस करें

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;
    }
};

int main() {
    Solution ob;
    cout << (ob.minFlips(2, 6, 5));
    return 0;
}

इनपुट

2 6 5

आउटपुट

3
  1. - C++ में कुल n बनाने के लिए आवश्यक न्यूनतम अक्षरों की संख्या

    समस्या कथन एक पूर्णांक n दिया गया है और मान लें a=1, b=2, c=3, ..., z=26। कुल n बनाने के लिए आवश्यक न्यूनतम अक्षरों की संख्या ढूंढें। यदि n=23 तो आउटपुट 1 है यदि n=72 तो आउटपुट 3 है (26 + 26 + 20) एल्गोरिदम 1. यदि n 26 से विभाज्य है तो उत्तर (n/26) है 2. यदि n 26 से विभाज्य नहीं है तो उत्तर (n/26)

  1. - C++ में दो स्ट्रिंग्स को समान बनाने के लिए दिए गए ऑपरेशन के न्यूनतम नंबर

    समस्या कथन दो स्ट्रिंग्स str1 और str2 दी गई हैं, दोनों में a और b वर्ण हैं। दोनों स्ट्रिंग्स समान लंबाई की हैं। दोनों स्ट्रिंग्स में एक _ (खाली स्थान) है। पहले स्ट्रिंग को दूसरी स्ट्रिंग में बदलने के लिए निम्न ऑपरेशन का उपयोग करके न्यूनतम ऑपरेशन की संख्या ढूंढें: यदि _ स्थिति i पर है तो _ को स्

  1. - C++ में स्ट्रिंग को पालिंड्रोम बनाने के लिए न्यूनतम विलोपन

    समस्या कथन आकार n की एक स्ट्रिंग दी गई है। स्ट्रिंग को पालिंड्रोम बनाने के लिए न्यूनतम वर्णों को हटाने का कार्य है। यदि दी गई स्ट्रिंग abcda है, तो हम पहले और अंतिम को छोड़कर किन्हीं 2 वर्णों को हटा सकते हैं ताकि यह पालिंड्रोम बन जाए। यदि हम b और c हटाते हैं तो ada स्ट्रिंग पालिंड्रोम है यद