Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 고유한 짝수를 갖는 하위 집합 계산

<시간/>

양의 정수 배열이 제공됩니다. 목표는 배열에서 각 부분 집합이 고유한 짝수를 갖도록 배열에서 숫자의 부분 집합을 찾는 것입니다. 동일한 요소를 가진 모든 세트는 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