কম্পিউটার

ন্যূনতম ফ্লিপগুলি সি++-এ c-এর সমান একটি OR b করতে


ধরুন আমাদের 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
    • bitA :=(a / 2^i) এবং 1
    • bitB :=(b / 2^i) এবং 1
    • যদি (bitA বা bitB) bitC এর মত না হয়, তাহলে
      • যদি bitC হয় 0
        • যদি bitA =1 এবং bitB =1 হয়, তাহলে উত্তর 2 দ্বারা বাড়ান, অন্যথায় 1 দ্বারা উত্তর বাড়ান
      • অন্যথায় 1 দ্বারা উত্তর বাড়ান
  • উত্তর ফেরত দিন

উদাহরণ(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

  1. C++ ব্যবহার করে সমস্ত উপাদানকে সমান করতে ন্যূনতম সংখ্যা।

  2. C++ এ মোট n তৈরি করতে ন্যূনতম সংখ্যক অক্ষর প্রয়োজন।

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

  4. C++ এ একটি স্ট্রিং প্যালিনড্রোম তৈরি করতে ন্যূনতম সংখ্যক মুছে ফেলা।