কম্পিউটার টিউটোরিয়াল

C++-এ a OR b কে c করার জন্য ন্যূনতম ফ্লিপস

মান লें তিনটি ধনাত্মক সংখ্যা a, b এবং c। আমাদেরকে a এবং b-র কিছু বিট ফ্লিপ করে (a OR b == c) করার জন্য ন্যূনতম ফ্লিপের সংখ্যা বের করতে হবে। এখানে আমরা বিটওয়াইজ OR অপারেশন বিবেচনা করছি।

ফ্লিপ অপারেশন হলো যেকোনো একক বিট ১ কে ০ বা ০ কে ১ করার কাজ তাদের বাইনারি রিপ্রেজেন্টেশনে। যেন a : 0010 এবং b := 0110, তাহলে c হলো 0101, ফ্লিপের পর a হবে 0001, এবং b হবে 0100।

সমাধানের ধাপসমূহ

  • ans := 0
  • for i in range 0 to 31:
    • bitC := (c / 2^i) AND 1
    • bitA := (a / 2^i) AND 1
    • bitB := (b / 2^i) AND 1
    • যদি (bitA OR bitB) bitC-এর সাথে একই না হয়, তবে:
      • যদি bitC ০ হয়:
        • যদি bitA = 1 এবং bitB = 1, তবে ans-কে ২ বাড়ান, অন্যথায় ans-কে ১ বাড়ান।
      • অন্যথায় ans-কে ১ বাড়ান।
  • 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));
}

ইনপুট

2 6 5

আউটপুট

3
  1. C++ ব্যবহার করে অ্যারের সব এলিমেন্ট সমান করতে ন্যূনতম মুভ সংখ্যা

  2. C++ ব্যবহার করে n তৈরির জন্য ন্যূনতম অক্ষর সংখ্যা

  3. C++ ব্যবহার করে দুটি স্ট্রিং সমান করার ন্যূনতম অপারেশন সংখ্যা

  4. C++ ব্যবহার করে স্ট্রিংকে প্যালিনড্রোম করার ন্যূনতম ডিলিশন সংখ্যা