কম্পিউটার

C++ ব্যবহার করে বিটওয়াইজ এবং কমপক্ষে একটি নন-খালি সাব-অ্যারে-এর সংখ্যা


একটি সমস্যা সমাধান করার জন্য যেখানে আমাদের একটি অ্যারে দেওয়া হয়েছে, এবং আমাদের সমস্ত সম্ভাব্য পূর্ণসংখ্যা খুঁজে বের করতে হবে যা বিটওয়াইজ এবং অন্তত একটি খালি সাবয়ারের নয়, উদাহরণস্বরূপ −

Input : nums[ ] = { 3, 5, 1, 2, 8 }
Output : { 2, 5, 0, 3, 8, 1 }
Explanation:
2 is the bitwise AND of subarray {2},
5 is the bitwise AND of subarray {5},
0 is the bitwise AND of subarray {1, 2}, {2, 8} and {1, 2, 8},
3 is the bitwise AND of subarray {3},
8 is the bitwise AND of subarray {8},
1 is the bitwise AND of subarray {1}, {3, 5} and {3, 5, 1}.

Input : nums[ ] = { 2, 6, 3, 8, 1 }
Output: { 1, 8, 3, 6, 2, 0 }

সমাধান খোঁজার পদ্ধতি

একটি সরল পদ্ধতি যেটি প্রয়োগ করা যেতে পারে,

  • সমস্ত সম্ভাব্য অ-খালি সাবয়ারে খুঁজুন।

  • অ্যারের মধ্য দিয়ে যাওয়ার সময়, সাবয়ারের প্রতিটি উপাদানের বিটওয়াইজ AND গণনা করুন৷

  • ডুপ্লিকেট মান এড়াতে, সমস্ত ফলাফল একটি সেটে সংরক্ষণ করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
int main(){
    int arr[] ={ 2, 6, 3, 8, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    // Declaring set to store result of each AND operation.
    unordered_set<int> result;
    int val;
    // nested loops to traverse through all the possible non empty subarrays.
    for (int i = 0; i < n; ++i){
        for (int j = i, val = INT_MAX; j < n; ++j){
            val = val & arr[j];
            // storing result of AND operation
            result.insert(val);
        }
    }
    cout << "All possible numbers are: ";
    // printing all the values of set.
    for (auto i = result.begin(); i != result.end();i++)
        cout << *i << " ";
    return 0;
}

আউটপুট

All possible numbers are: 1 8 3 6 0 2

উপরের কোডের ব্যাখ্যা

  • AND অপারেশনের সমস্ত ফলাফল সংরক্ষণের জন্য সেট ঘোষণা করা হচ্ছে।

  • INT_MAX এর সাথে 'val' ভেরিয়েবল শুরু করা হচ্ছে কারণ আমাদের 1-এ সেট করা সমস্ত বিটগুলির সাথে AND অপারেশন করতে হবে।

  • ith ইনডেক্স থেকে সম্ভাব্য সকল সাবয়ারের মাধ্যমে যেতে ইনসাইড লুপ।

  • একে অপরের সাথে এবং নিজেদের সাথে প্রতিটি উপাদানের গণনা এবং পরিচালনা এবং ফলাফল সেটে সংরক্ষণ করা।

  • ফলাফল সেটের সমস্ত মান প্রিন্ট করা হচ্ছে।

উপসংহার

এই টিউটোরিয়ালে, আমরা এই সমস্যাটি সমাধান করার জন্য একটি সহজ পদ্ধতি নিয়ে আলোচনা করেছি, যেমন, প্রতিটি সম্ভাব্য সাব্যারেতে গণনা এবং অপারেশন। আমরা এই সমস্যা সমাধানের জন্য C++ প্রোগ্রাম নিয়েও আলোচনা করেছি। এছাড়াও, আপনি এই কোডটি জাভা, সি, পাইথন ইত্যাদির মতো অন্য যেকোনো ভাষায় লিখতে পারেন। আমরা আশা করি এই টিউটোরিয়ালটি আপনার কাজে লাগবে।


  1. সি++ ব্যবহার করে সংখ্যাগুলি প্রিন্ট করার প্রোগ্রাম যাতে পরপর দুটি সংখ্যা সহ-প্রধান নয় এবং প্রতি তিনটি পরপর সংখ্যা সহ-প্রধান হয়

  2. C++ এ ডিভাইড অ্যান্ড কনক্যুয়ার ব্যবহার করে সর্বাধিক যোগফল সাব-অ্যারে

  3. দুটি সংখ্যা খুঁজুন যার যোগফল এবং GCD C++ এ দেওয়া আছে

  4. C++-এ ডিভাইড অ্যান্ড কনকার অ্যালগরিদম ব্যবহার করে সর্বোচ্চ সাবারে সমষ্টি