हमें सकारात्मक पूर्णांकों की एक सरणी दी गई है। लक्ष्य एक सरणी में संख्याओं के उपसमुच्चय को इस प्रकार खोजना है कि प्रत्येक उपसमुच्चय में अलग-अलग सम संख्याएँ हों। समान तत्वों वाले सभी सेटों की गणना 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