हमें सकारात्मक पूर्णांकों की एक सरणी दी गई है। लक्ष्य एक सरणी में संख्याओं के उपसमुच्चय को इस प्रकार खोजना है कि प्रत्येक उपसमुच्चय में अलग-अलग सम संख्याएँ हों। समान तत्वों वाले सभी सेटों की गणना 1 के रूप में की जाएगी। [2,4,6] और [6,2,4] एक ही सेट हैं।
आइए उदाहरणों के साथ समझते हैं
इनपुट - एआर [] ={1,3,5,7,8,3,2};
आउटपुट −भिन्न सम संख्या वाले उपसमुच्चय की संख्या है − 3
स्पष्टीकरण - सबसेट होंगे - [2], [8], [2,8]
इनपुट - एआर [] ={2,4,6};
आउटपुट −भिन्न सम संख्या वाले उपसमुच्चय की संख्या है − 7
स्पष्टीकरण - सबसेट होंगे - [2], [4], [6], [2,4], [2,6], [4,6], [2,4,6]
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
हम सरणी में सभी सम संख्याओं का एक सेट बनाते हैं। यह अलग-अलग सम संख्याओं की गिनती देता है। फ़ॉर्मूला 2 सम गणना . होगा - 1
-
संख्याओं की एक सरणी लें एआर []।
-
Functionsubset_even(int arr[], int size) संख्याओं की एक सरणी लेता है और सबसेट को अलग-अलग सम संख्याओं के साथ लौटाता है।
-
प्रारंभिक गणना 0 के रूप में लें।
-
सम संख्याओं के लिए एक unordered_set
un_set बनाएं। -
ट्रैवर्स एआर [] लूप के लिए उपयोग कर रहा है। i=0 से i<लंबाई तक।
-
अगर गिरफ्तारी [i]% 2 ==0, यह सम है। un_set में डालें।
-
गिनती लें=un_set.size() // अलग-अलग सम संख्याएं।
-
अपडेट गिनती=पाउ(2,गिनती) - 1.
-
परिणाम के रूप में वापसी की गिनती।
उदाहरण
#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]); } } unordered_set<int>:: iterator 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