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[]。

  • 函数 subset_even(int arr[], int size) 获取一个数字数组并返回具有不同偶数的子集。

  • 将初始计数设为 0。

  • 为偶数创建一个 unordered_set<int> un_set。

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

  • 如果 arr[i]%2==0,则它是偶数。将其插入到 un_set 中。

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

  • 更新 count=pow(2,count) - 1。

  • 返回 count 作为结果。

示例

 在线演示

#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

更新于:2020年12月1日

196 次浏览

开始您的职业生涯

完成课程获得认证

开始学习
广告