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 สำหรับเลขคู่

  • Traverse arr[] ใช้สำหรับวนซ้ำ จาก i=0 ถึง i<ความยาว

  • ถ้า arr[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