이 문제에서 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