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

C++-এ অ্যারেতে পৃথক জোড় সংখ্যা বিশিষ্ট সাবসেট গণনা


আমাদের একটি পজিটিভ ইন্টিজার অ্যারে দেওয়া আছে। লক্ষ্য হলো এমন সাবসেট খুঁজে বের করা যাতে প্রতিটি সাবসেটে পৃথক (distinct) জোড় (even) সংখ্যা থাকে। একই উপাদানগুলো দিয়ে বने সেটগুলো ১ বলে গণ্য হবে। [2,4,6] এবং [6,2,4] একই সেট।

উদাহরণ দিয়ে বুঝি

ইনপুট − arr[] = {1,3,5,7,8,3,2 };

আউটপুট − পৃথক জোড় সংখ্যা বিশিষ্ট সাবসেট: ৩

ব্যাখ্যা − সাবসেট: [2], [8], [2,8]

ইনপুট − arr[] = {2,4,6 };

আউটপুট − পৃথক জোড় সংখ্যা বিশিষ্ট সাবসেট: ৭

ব্যাখ্যা − সাবসেট: [2], [4], [6], [2,4], [2,6], [4,6], [2,4,6]

প্রোগ্রামে ব্যবহৃত পদ্ধতি

অ্যারেতে থাকা সব জোড় সংখ্যা একটা সেটে (unordered_set) রাখি। এতে পৃথক জোড় সংখ্যার কাউন্ট পাওয়া যায়। সাবসেট সংখ্যা হবে 2^(even count) - 1।

  • অ্যারে arr[] নিন।
  • subset_even(int arr[], int size) ফাংশন অ্যারে নিয়ে পৃথক জোড় সংখ্যা সাবসেট রিটার্ন করে।
  • প্রাথমিক কাউন্ট ০।
  • unordered_set<int> un_set জোড় সংখ্যা রাখতে।
  • i=0 থেকে size পর্যন্ত লুপে: arr[i]%2==0 হলে un_set.insert(arr[i])।
  • count = un_set.size() (পৃথক জোড় সংখ্যা)।
  • count = pow(2, count) - 1 আপডেট করুন।
  • count রিটার্ন করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;

int subset_even(int arr[], int size) {
    int count = 0;
    unordered_set<int> un_set;
    for (int i = 0; i < size; i++) {
        if (arr[i] % 2 == 0) {
            un_set.insert(arr[i]);
        }
    }
    count = un_set.size();
    count = pow(2, count) - 1;
    return count;
}

int main() {
    int arr[] = {10, 4, 21, 3, 5, 7, 6, 8};
    int size = sizeof(arr) / sizeof(arr[0]);
    cout << "Count of subsets having distinct even numbers are: " << subset_even(arr, size);
    return 0;
}

আউটপুট

Count of subsets having distinct even numbers are: 15
  1. C++-এ অদ্বিতীয় ডিজিটযুক্ত সংখ্যা গণনা

  2. C++-এ অ্যারেতে সর্বোচ্চ সन्नিহিত জোড় সংখ্যা (Contiguous Even Numbers) এর গণনা

  3. C++ তে সর্টেড অ্যারেতে এবসোলিউট ডিস্টিংক্ট কাউন্ট

  4. C++-এ অ্যারে ইনডেক্স যেখানে বাম ও ডান পাশে জোড় বা বিজোড় সংখ্যার কাউন্ট সমান