Representar K como suma de N-números de Bonacci

Dados dos números K y N . La tarea es representar el número K dado como una suma de varios números N-bonacci .

Ejemplos: 

Entrada: K = 21, N = 5 
Salida:
Los tres números de los 5-bonacci son: 16, 4, 1. 
Explicación: 
Para N = 5, la serie será: 1, 1, 2, 4, 8 , 16, 31, 61, 120, etc. Los tres números 16, 4 y 1 suman 21.

Entrada: K = 500, N = 43 
Salida:
Los números de 43-bonacci que suman 500 son: 256 128 64 32 16 4 
  

Enfoque ingenuo: 
el enfoque más simple es generar la serie N-bonacci de hasta 50 términos y almacenar sus valores en una array. Encuentre el subconjunto de la array que tiene la suma dada e imprima el tamaño del subconjunto.

Complejidad del tiempo: O(2 N )

Enfoque eficiente : este enfoque se basa en el enfoque eficiente sobre cómo formar números de N-bonacci, discutido en este artículo

Siga los pasos a continuación para resolver el problema:  

  1. Genere la serie N-bonacci y almacene los valores en una array, digamos N_bonacci[] . (hasta 50 términos)
  2. Inicialice otra array, ans[] , para guardar los números de la serie cuya suma es K .
  3. Recorra la array N-bonacci en el orden inverso y siga comprobando si, K – N_bonacci[i] >= 0 . Si es verdadero, empuje N_bonacci[i] a la array ans y reduzca K a K – N_bonacci[i] .
  4. Continúe disminuyendo K hasta que se convierta en 0 y, finalmente, genere el tamaño y los elementos de la array ans .

A continuación se muestra la implementación del enfoque anterior:  

C++

// C++ program for the above problem
#include <bits/stdc++.h>
using namespace std;
 
// array to store the N-Bonacci series
long long N_bonacci[100];
 
// Function to express K as sum of
// several N_bonacci numbers
void N_bonacci_nums(int n, int k)
{
    N_bonacci[0] = 1;
 
    for (int i = 1; i <= 50; ++i) {
        for (int j = i - 1;
            j >= i - k and j >= 0;
            --j)
            N_bonacci[i]
                += N_bonacci[j];
    }
 
    vector<long long> ans;
    for (int i = 50; i >= 0; --i)
        if (n - N_bonacci[i] >= 0) {
            ans.push_back(N_bonacci[i]);
            n -= N_bonacci[i];
        }
 
    if (ans.size() == 1)
        ans.push_back(0);
 
    cout << ans.size() << endl;
    for (int i = 0; i < ans.size(); ++i)
        cout << ans[i] << ", ";
}
 
// Driver code
int main()
{
    int n = 21, k = 5;
    N_bonacci_nums(n, k);
    return 0;
} 

Java

// Java program for the above problem
import java.util.*;
 
class GFG{
     
// Array to store the N-Bonacci series
public static long []N_bonacci= new long [100];
 
// Function to express K as sum of
// several N_bonacci numbers
@SuppressWarnings("unchecked")
public static void N_bonacci_nums(int n, int k)
{
    N_bonacci[0] = 1;
 
    for(int i = 1; i <= 50; ++i)
    {
        for(int j = i - 1;
                j >= i - k && j >= 0 ;--j)
            N_bonacci[i]+= N_bonacci[j];
    }
 
    Vector ans = new Vector();
    for(int i = 50; i >= 0; --i)
        if (n - N_bonacci[i] >= 0)
        {
            ans.add(N_bonacci[i]);
            n -= N_bonacci[i];
        }
 
    if (ans.size() == 1)
        ans.add(0);
 
    System.out.println(ans.size());
    for(int i = 0; i < ans.size(); ++i)
        System.out.print(ans.get(i) + ", ");
}
 
// Driver code
public static void main(String args[])
{
    int n = 21, k = 5;
    N_bonacci_nums(n, k);
}
}
 
// This code is contributed by SoumikMondal

Python3

# Python3 program for the above problem
 
# Array to store the N-Bonacci series
N_bonacci = [0] * 100
 
# Function to express K as sum of
# several N_bonacci numbers
def N_bonacci_nums(n, k):
     
    N_bonacci[0] = 1
 
    for i in range(1, 51):
        j = i - 1
         
        while j >= i - k and j >= 0:
            N_bonacci[i] += N_bonacci[j]
            j -= 1
             
    ans = []
    for i in range(50, -1, -1):
        if (n - N_bonacci[i] >= 0):
            ans.append(N_bonacci[i])
            n -= N_bonacci[i]
 
    if (len(ans) == 1):
        ans.append(0)
 
    print(len(ans))
    for i in ans:
        print(i, end = ", ")
 
# Driver code
if __name__ == '__main__':
     
    n = 21
    k = 5
     
    N_bonacci_nums(n, k)
 
# This code is contributed by mohit kumar 29

C#

// C# program for the above problem
using System;
using System.Collections.Generic;
 
class GFG{
 
// Array to store the N-Bonacci series    
public static long []N_bonacci = new long [100];
 
// Function to express K as sum of
// several N_bonacci numbers
static void N_bonacci_nums(long n, long k)
{
    N_bonacci[0] = 1;
 
    for(int i = 1; i <= 50; ++i)
    {
        for(int j = i - 1;
                j >= i - k && j >= 0; --j)
            N_bonacci[i] += N_bonacci[j];
    }
 
    List<long> ans = new List<long>();
    for(int i = 50; i >= 0; --i)
        if (n - N_bonacci[i] >= 0)
        {
            ans.Add(N_bonacci[i]);
            n -= N_bonacci[i];
        }
 
    if (ans.Count == 1)
        ans.Add(0);
 
    Console.WriteLine(ans.Count);
    for(int i = 0; i < ans.Count; ++i)
        Console.Write(ans[i] + ", ");
}
 
// Driver code
static void Main()
{
    long n = 21, k = 5;
     
    N_bonacci_nums(n, k);
}
}
 
// This code is contributed by divyeshrabadiya07

Javascript

<script>
 
// Javascript program for the above problem
 
// Array to store the N-Bonacci series
let N_bonacci= new Array(100);
for(let i = 0; i < 100; i++)
{
    N_bonacci[i] = 0;
}
 
// Function to express K as sum of
// several N_bonacci numbers
function N_bonacci_nums(n, k)
{
    N_bonacci[0] = 1;
   
    for(let i = 1; i <= 50; ++i)
    {
        for(let j = i - 1;
                j >= i - k && j >= 0 ;--j)
            N_bonacci[i]+= N_bonacci[j];
    }
   
    let ans = [];
    for(let i = 50; i >= 0; --i)
        if (n - N_bonacci[i] >= 0)
        {
            ans.push(N_bonacci[i]);
            n -= N_bonacci[i];
        }
   
    if (ans.length == 1)
        ans.push(0);
   
    document.write(ans.length+"<br>");
    for(let i = 0; i < ans.length; ++i)
        document.write(ans[i] + ", ");
}
 
// Driver code
let n = 21, k = 5;
 
N_bonacci_nums(n, k);
 
// This code is contributed by unknown2108
 
</script>
Producción: 

3
16, 4, 1,

 

Complejidad de Tiempo: O(K * K) 
Espacio Auxiliar: O(1)
 

Publicación traducida automáticamente

Artículo escrito por IshwarGupta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *