เราได้รับอาร์เรย์ของจำนวนเต็มบวก เป้าหมายคือการหาชุดย่อยของตัวเลขในอาร์เรย์เพื่อให้แต่ละชุดย่อยมีตัวเลขคู่ที่แตกต่างกันอยู่ในนั้น ชุดทั้งหมดที่มีองค์ประกอบเหมือนกันจะนับเป็น 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