इस समस्या में, हमें N पूर्णांकों की एक सरणी और एक संख्या K दी जाती है। हमारा कार्य उन सभी विशिष्ट संख्याओं को प्रिंट करना है जो सरणी से किसी भी K तत्व को जोड़कर बनाई जा सकती हैं। किसी भी संख्या को चुनते समय K बार दोहराया जा सकता है।
आइए समस्या को समझने के लिए एक उदाहरण लेते हैं -
Input: array = {2, 5, 13, 9} K = 2 Output: 2,7,15,11,10,18,14,26,22 Explaination: 2 elements added : 2+2=4, 2+5=7, 2+13=15, 2+9=11, 5+5=10, 5+13=18, 5+9=14, 13+13=26, 13+9=22, 9+9=18
इस समस्या को हल करने के लिए, हम सरणी से k तत्व के सभी संयोजन पाएंगे। इसके लिए हम रिकर्सन का इस्तेमाल करेंगे जिसे रिकर्सिवली नंबर जेनरेट करने के लिए कहा जाएगा। डुप्लिकेट मानों से बचने के लिए, हम संख्याओं को एक सेट में संग्रहीत करेंगे।
उदाहरण
कोड हमारे समाधान के कार्यान्वयन को दिखाएगा -
#include <bits/stdc++.h> using namespace std; set<int> distNumbers; void generateNumberFromArray(int count, int arr[], int n, int num, int k) { if (k == count) { distNumbers.insert(num); return; } for (int i = 0; i < n; i++) { generateNumberFromArray(count + 1, arr, n, num + arr[i], k); } } void printDistinctIntegers(int k, int arr[], int n) { generateNumberFromArray(0, arr, n, 0, k); cout<<"The "<<distNumbers.size()<<" distinct integers are:\n"; while (!distNumbers.empty()) { cout << *distNumbers.begin() <<"\t"; distNumbers.erase(*distNumbers.begin()); } } int main() { int arr[]={ 2, 5, 13, 9 }; int n=4; int k=2; printDistinctIntegers(k, arr, n); return 0; }
आउटपुट
The 9 distinct integers are − 4 7 10 11 14 15 18 22 26