ในปัญหานี้ เราได้รับอาร์เรย์ของจำนวนเต็ม 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