计算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 <int>未设置。

  • 使用for循环遍历arr []。从i = 0到i <length。

  • 如果arr [i]%2 == 0,则为偶数。插入至未设置。

  • 取count = un_set.size()//不重复的偶数。

  • 更新计数= 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