从C ++中的给定N个数字数组中打印所有可以由K个数字形成的不同整数

在这个问题中,我们给了一个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

以上是 从C ++中的给定N个数字数组中打印所有可以由K个数字形成的不同整数 的全部内容, 来源链接: utcz.com/z/354306.html

回到顶部