কম্পিউটার

C++-এ K-এর নিকটতম সাব-অ্যারের বিটওয়াইজ AND


এই সমস্যায়, আমাদের n আকারের একটি অ্যারে অ্যারে [] এবং একটি পূর্ণসংখ্যা k দেওয়া হয়েছে। আমাদের কাজ হল সূচী i থেকে j পর্যন্ত সাবয়ারে খুঁজে বের করা এবং এর সমস্ত উপাদানের বিটওয়াইজ এবং গণনা করা। এই প্রিন্ট করার পর abs-এর সর্বনিম্ন মান(K- (সাবয়ারের বিটওয়াইজ এবং))।

সমস্যাটি বোঝার জন্য একটি উদাহরণ দেওয়া যাক,

ইনপুট − arr[] ={5, 1}, k =2

আউটপুট

সমস্যা সমাধানের জন্য, কয়েকটি পদ্ধতি থাকতে পারে।

একটি সহজ সমাধান সরাসরি পদ্ধতি ব্যবহার করা হবে। বিটওয়াইজ এবং সমস্ত সাব-অ্যারের জন্য তারপর |K-X| খুঁজে বের করে।

ধাপ 1 − বিটওয়াইজ এবং সমস্ত সাব-অ্যারের জন্য খুঁজুন।

ধাপ 2 − উপরের ধাপ 1 থেকে পাওয়া প্রতিটি মানের জন্য (বলুন X)। |k - X| এর মান খুঁজুন।

ধাপ 3 − উপরে পাওয়া ন্যূনতম মানটিকে একটি ন্যূনতম ভেরিয়েবলে সংরক্ষণ করুন৷

পদক্ষেপ 4৷ − শেষে, প্রিন্ট মিন।

উদাহরণ

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

#include <iostream>
using namespace std;
int CalcBitwiseANDClosestK(int arr[], int n, int k){
   int minimum = 1000;
   for (int i = 0; i < n; i++) {
      int X = arr[i];
      for (int j = i; j < n; j++) {
         X &= arr[j];
         minimum = min(minimum, abs(k - X));
      }
   }
   return minimum;
}
int main() {
   int arr[] = { 1, 6 , 4, 9, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 5;
   cout<<"Minimum value difference between Bitwise AND of sub-array and K is "<<CalcBitwiseANDClosestK(arr, n, k);
   return 0;
}

আউটপুট

Minimum value difference between Bitwise AND of sub-array and K is 1

আরেকটি সমাধান হতে পারে সাব-অ্যারেতে AND অপারেশন পর্যবেক্ষণ করা। বিটওয়াইজ এবং এর একটি বৈশিষ্ট্য রয়েছে যে এটি কখনই বাড়বে না। সুতরাং, আমাদের ন্যূনতম পার্থক্যের উপর নজর রাখতে হবে যা X ≤ K হলে বাড়বে।

উদাহরণ

#include <iostream>
using namespace std;
int CalcBitwiseANDClosestK(int arr[], int n, int k){
   int minimum = 1000000;
   for (int i = 0; i < n; i++) {
      int BitwiseAND = arr[i];
      for (int j = i; j < n; j++) {
         BitwiseAND &= arr[j];
         minimum = min(minimum, abs(k - BitwiseAND));
         if (BitwiseAND <= k)
            break;
      }
   }
   return minimum;
}
int main() {
   int arr[] = {1, 6 , 4, 9, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 5;
   cout<<"Minimum value difference between Bitwise AND of sub-array and K is "<<CalcBitwiseANDClosestK(arr, n, k);
   return 0;
}

আউটপুট

Minimum value difference between Bitwise AND of sub-array and K is 1

  1. C++ এ বৃত্ত এবং আয়তক্ষেত্র ওভারল্যাপিং

  2. C++ এ ডোমিনো এবং ট্রোমিনো টাইলিং

  3. Bitwise এবং C++ এ কি?

  4. সি++ এবং সি#-এ ফরিচ