এই সমস্যায়, আমাদেরকে 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