📌  相关文章
📜  打印给定的N个数字数组中可以由K个数字形成的所有不同整数

📅  最后修改于: 2021-04-23 16:28:56             🧑  作者: Mango

给定一个由N个元素组成的数组和一个整数K,打印所有可以通过从给定的N个数字中选择K个数字而形成的不同整数。数组中的数字可以选择任意次。

例子:

方法:将使用递归解决问题。在选择的元素数等于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