Imprimir números con dígitos 0 y 1 solo de tal manera que su suma sea N

Dado un número N, la tarea es encontrar los números requeridos que constan de solo 0 y 1 dígito cuya suma sea igual a N.
Ejemplo: 
 

Input: 9 
Output: 1 1 1 1 1 1 1 1 1 
Only numbers smaller than or equal to 9 with 
digits 0 and 1 only are 0 and 1 itself.
So to get 9, we have to add 1 - 9 times.

Input: 31
Output: 11 10 10

Acercarse: 
 

  1. Inicialice el producto p a 1 y m a cero.
  2. Cree el vector que almacena los recuentos enteros resultantes de 0 y 1.
  3. Haga un bucle para N y verifique si N es múltiplo de 10, si es así, obtenga el decimal y actualice p multiplicando 10 y almacene este valor en un vector y disminuya N por m, haga esto para cada decimal e imprima el tamaño total del vector.
  4. Finalmente recorre el vector e imprime los elementos.

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

C++

// C++ implementation of the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to count the numbers
int findNumbers(int N)
{
    // Initialize vector array that store
    // result.
    vector<int> v;
 
    // Get the each decimal and find its
    // count store in vector.
    while (N) {
 
        int n = N, m = 0, p = 1;
        while (n) {
 
            // find decimal
            if (n % 10)
              m += p;
 
            n /= 10;
            p *= 10;
        }
 
        v.push_back(m);
 
        // Decrement N by m for each decimal
        N -= m;
    }
 
    // Loop for each element of vector
    // And print its content.
    for (int i = 0; i < v.size(); i++)
        cout << " " << v[i];
 
    return 0;
}
 
// Driver code
int main()
{
    int N = 31;
    findNumbers(N);
 
    return 0;
}

Java

// Java implementation of the above approach
import java.util.*;
 
public class GfG{
 
    // Function to count the numbers
    public static int findNumbers(int N)
    {
        // Initialize vector array that store
        // result.
        ArrayList<Integer> v = new ArrayList<Integer>();
       
        // Get the each decimal and find its
        // count store in vector.
        while (N > 0) {
       
            int n = N, m = 0, p = 1;
            while (n > 0) {
       
                // find decimal
                if (n % 10 != 0)
                  m += p;
       
                n /= 10;
                p *= 10;
            }
       
            v.add(m);
       
            // Decrement N by m for each decimal
            N -= m;
        }
       
        // Loop for each element of vector
        // And print its content.
        for (int i = 0; i < v.size(); i++)
            System.out.print(" " + v.get(i));
       
        return 0;
    }
 
     public static void main(String []args){
         
        int N = 31;
        findNumbers(N);
     }
}
 
// This code is contributed by Rituraj Jain

Python3

# Python 3 implementation of
# the above approach
 
# Function to count the numbers
def findNumbers(N) :
 
    # Initialize vector array that
    # store result.
    v = [];
 
    # Get the each decimal and find
    # its count store in vector.
    while (N) :
 
        n, m, p = N, 0, 1
        while (n) :
 
            # find decimal
            if (n % 10) :
                m += p
 
            n //= 10
            p *= 10
 
        v.append(m);
 
        # Decrement N by m for
        # each decimal
        N -= m
 
    # Loop for each element of vector
    # And print its content.
    for i in range(len(v)) :
        print(v[i], end = " ")
 
# Driver Code
if __name__ == "__main__" :
     
    N = 31
    findNumbers(N)
 
# This code is contributed by Ryuga

C#

// C# implementation of the above approach
using System;
using System.Collections;
 
class GfG
{
 
    // Function to count the numbers
    public static int findNumbers(int N)
    {
        // Initialize vector array that store
        // result.
        ArrayList v = new ArrayList();
         
        // Get the each decimal and find its
        // count store in vector.
        while (N > 0)
        {
            int n = N, m = 0, p = 1;
            while (n > 0)
            {
         
                // find decimal
                if (n % 10 != 0)
                    m += p;
                     
                n /= 10;
                p *= 10;
            }
            v.Add(m);
         
            // Decrement N by m for each decimal
            N -= m;
        }
         
        // Loop for each element of vector
        // And print its content.
        for (int i = 0; i < v.Count; i++)
            Console.Write(" " + v[i]);
         
        return 0;
    }
     
    // Driver code
    public static void Main()
    {
        int N = 31;
        findNumbers(N);
    }
}
 
// This code is contributed by PrinciRaj1992

PHP

<?php
// PHP implementation of the
// above approach
 
// Function to count the numbers
function findNumbers($N)
{
    // Initialize vector array
    // that store result.
    $v = array();
 
    // Get the each decimal and find
    // its count store in vector.
    while ($N)
    {
 
        $n = $N;
        $m = 0;
        $p = 1;
        while ($n)
        {
 
            // find decimal
            if ($n % 10)
            $m += $p;
 
            $n /= 10;
            $p *= 10;
        }
 
        array_push($v,$m);
 
        // Decrement N by m for
        // each decimal
        $N -= $m;
    }
 
    // Loop for each element of vector
    // And print its content.
    for ($i = 0; $i < sizeof($v); $i++)
        echo " " , $v[$i];
 
    return 0;
}
 
// Driver code
$N = 31;
findNumbers($N);
 
// This code is contributed
// by ChitraNayal
?>

Javascript

<script>
// Javascript implementation of the above approach
 
// Function to count the numbers
function findNumbers(N)
{
    // Initialize vector array that store
    // result.
    let v = [];
 
    // Get the each decimal and find its
    // count store in vector.
    while (N) {
 
        let n = N, m = 0, p = 1;
        while (n) {
 
            // find decimal
            if (n % 10)
              m += p;
 
            n = parseInt(n/10);
            p *= 10;
        }
 
        v.push(m);
 
        // Decrement N by m for each decimal
        N -= m;
    }
 
    // Loop for each element of vector
    // And print its content.
    for (let i = 0; i < v.length; i++)
        document.write(" " + v[i]);
 
    return 0;
}
 
// Driver code
let N = 31;
findNumbers(N);
 
// This code is contributed by souravmahato34.
</script>
Producción: 

11 10 10

 

Complejidad de tiempo : O(log(N))  
Espacio auxiliar : O(log(N))

Publicación traducida automáticamente

Artículo escrito por Samdare B 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 *