양의 정수 배열이 제공됩니다. 목표는 배열에서 각 부분 집합이 고유한 짝수를 갖도록 배열에서 숫자의 부분 집합을 찾는 것입니다. 동일한 요소를 가진 모든 세트는 1로 계산됩니다. [2,4,6] 및 [6,2,4]는 동일한 세트입니다.
예를 들어 이해하자
입력 - arr[] ={1,3,5,7,8,3,2 };
출력 − 고유한 짝수를 갖는 부분집합의 개수는 − 3입니다.
설명 − 하위 집합은 − [2], [8], [2,8]
입니다.입력 - arr[] ={2,4,6 };
출력 - 고유한 짝수를 갖는 부분집합의 개수는 - 7입니다.
설명 − 하위 집합은 − [2], [4], [6], [2,4], [2,6], [4,6], [2,4,6]
아래 프로그램에서 사용한 접근 방식은 다음과 같습니다.
배열의 모든 짝수 집합을 만듭니다. 이것은 고유한 짝수의 개수를 제공합니다. 공식은 2 짝수 입니다. - 1
-
숫자 배열을 가져옵니다. arr[].
-
Functionsubset_even(int arr[], int size)은 숫자 배열을 취하고 고유한 짝수를 가진 하위 집합을 반환합니다.
-
초기 카운트를 0으로 합니다.
-
짝수에 대해 unordered_set
un_set을 만듭니다. -
for 루프를 사용하여 ar[]를 트래버스합니다. i=0에서 i<길이.
까지 -
rr[i]%2==0이면 짝수입니다. un_set에 삽입하십시오.
-
count=un_set.size() // 고유한 짝수를 취합니다.
-
업데이트 count=pow(2,count) - 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