给定一个由N个元素组成的数组和一个整数K,打印所有可以通过从给定的N个数字中选择K个数字而形成的不同整数。数组中的数字可以选择任意次。
例子:
Input: k = 2, a[] = {3, 8, 17, 5}
Output: The 10 distinct integers are:
6 8 10 11 13 16 20 22 25 34
The 2 elements chosen are:
3+3 = 6, 5+3 = 8, 5+5 = 10, 8+3 = 11, 8+5 = 13
8+8 = 16, 17+3 = 20, 17+5 = 22, 17+8 = 25, 17+17 = 34.
Input: k = 3, a[] = {3, 8, 17}
Output: The 10 distinct integers are:
9 14 19 23 24 28 33 37 42 51
方法:将使用递归解决问题。在选择的元素数等于k时,将尝试所有组合,然后将数字保留在集合中,以使重复元素不会被计数两次。函数generateNumber(int count,int a [],int n,int num,int k)是一个递归函数,其中的基本情况是当计数变为K时,表示已从数组中选择了K个元素。参数中的num表示由数字数构成的数字。在函数,对数组进行迭代,并为每个元素调用count为count + 1且num为num + a [i]的递归函数。
下面是上述方法的实现:
C++
// C++ program to print all distinct
// integers that can be formed by K numbers
// from a given array of N numbers.
#include
using namespace std;
// stores all the distinct integers formed
set s;
// Function to generate all possible numbers
void generateNumber(int count, int a[], int n,
int num, int k)
{
// Base case when K elements
// are chosen
if (k == count) {
// insert it in set
s.insert(num);
return;
}
// Choose every element and call the function
for (int i = 0; i < n; i++) {
generateNumber(count + 1, a, n, num + a[i], k);
}
}
// Function to print the distinct integers
void printDistinctIntegers(int k, int a[], int n)
{
generateNumber(0, a, n, 0, k);
cout << "The " << s.size()
<< " distinct integers are:\n";
// prints all the elements in the set
while (!s.empty()) {
cout << *s.begin() << " ";
// erase the number after printing it
s.erase(*s.begin());
}
}
// Driver Code
int main()
{
int a[] = { 3, 8, 17, 5 };
int n = sizeof(a) / sizeof(a[0]);
int k = 2;
// Calling Function
printDistinctIntegers(k, a, n);
return 0;
}
Java
// Java program to print all
// distinct integers that can
// be formed by K numbers from
// a given array of N numbers.
import java.util.*;
import java.lang.*;
class GFG
{
// stores all the distinct
// integers formed
static TreeSet set =
new TreeSet();
// Function to generate
// all possible numbers
public static void generateNumber(int count, int a[],
int n, int num, int k)
{
// Base case when K
// elements are chosen
if(count == k)
{
set.add(num);
return;
}
// Choose every element
// and call the function
for(int i = 0; i < n; i++)
generateNumber(count + 1, a, n,
num + a[i], k);
}
// Function to print
// the distinct integers
public static void printDistinctIntegers(int k,
int a[], int n)
{
generateNumber(0, a, n, 0, k);
System.out.print("The" + " " + set.size() +
" " + "distinct integers are: ");
System.out.println();
Iterator i = set.iterator();
// prints all the
// elements in the set
while(set.isEmpty() == false)
{
while(i.hasNext())
{
System.out.print(i.next() + " ");
//set.remove(i.next());
}
}
}
// Driver Code
public static void main (String[] args)
{
int arr[] = {3, 8, 17, 5};
int n = arr.length;
int k = 2;
// Calling Function
printDistinctIntegers(k, arr, n);
}
}
Python3
# Python3 program to print all distinct
# integers that can be formed by K numbers
# from a given array of N numbers.
# stores all the distinct integers formed
s = set()
# Function to generate all possible numbers
def generateNumber(count, a, n, num, k):
# Base case when K elements are chosen
if k == count:
# insert it in set
s.add(num)
return
# Choose every element and call the function
for i in range(0, n):
generateNumber(count + 1, a, n,
num + a[i], k)
# Function to print the distinct integers
def printDistinctIntegers(k, a, n):
generateNumber(0, a, n, 0, k)
print("The", len(s),
"distinct integers are:")
# prints all the elements in the set
for i in sorted(s):
print(i, end = " ")
# Driver Code
if __name__ == "__main__":
a = [3, 8, 17, 5]
n, k = len(a), 2
# Calling Function
printDistinctIntegers(k, a, n)
# This code is contributed by Rituraj Jain
C#
// C# program to print all
// distinct integers that can
// be formed by K numbers from
// a given array of N numbers.
using System;
using System.Collections.Generic;
class GFG
{
// stores all the distinct
// integers formed
static SortedSet set =
new SortedSet();
// Function to generate
// all possible numbers
public static void generateNumber(int count, int []a,
int n, int num, int k)
{
// Base case when K
// elements are chosen
if(count == k)
{
set.Add(num);
return;
}
// Choose every element
// and call the function
for(int i = 0; i < n; i++)
generateNumber(count + 1, a, n,
num + a[i], k);
}
// Function to print
// the distinct integers
public static void printDistinctIntegers(int k,
int []a, int n)
{
generateNumber(0, a, n, 0, k);
Console.Write("The" + " " + set.Count +
" " + "distinct integers are: ");
Console.WriteLine();
// prints all the
// elements in the set
foreach(int sets in set)
{
Console.Write(sets + " ");
}
}
// Driver Code
public static void Main (String[] args)
{
int []arr = {3, 8, 17, 5};
int n = arr.Length;
int k = 2;
// Calling Function
printDistinctIntegers(k, arr, n);
}
}
// This code has been contributed by 29AjayKumar
输出:
The 10 distinct integers are:
6 8 10 11 13 16 20 22 25 34