Representar N como la suma de K números pares o K números impares con repeticiones permitidas

Dados dos enteros N y K , la tarea es encontrar una array de tamaño K que contenga solo elementos pares o impares donde la suma de todos los elementos de la array sea N. Si no existe tal array, escriba «No».
Ejemplos: 
 

Entrada: N = 18, K = 3 
Salida: 6 6 6
Entrada: N = 19, K = 5 
Salida: 3 3 3 3 7 
 

Enfoque: La idea es elegir el número par o impar más pequeño K-1 veces y finalmente, calcular el último número con la ayuda de la suma total. Si el último número también es par para el número par e impar para el número impar más pequeño. Entonces es posible elegir tal array. De lo contrario, no existe tal array posible.
A continuación se muestra la implementación del enfoque anterior:
 

C++

// C++ implementation to find an
// array of size K with all the
// even or odd elements in the array
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the array with
// all the even / odd elements
void getArrayOfSizeK(int n, int k)
{
    vector<int> ans;
 
    // If array could be constructed
    // by adding odd elements
    // we need to find the kth
    // element is odd or even
 
    // if array of odd elements
    // would be the answer then
    // k-1 elements would be 1
 
    // First let's check
    // kth is odd or even
    int odd = n - ((k - 1) * 1);
 
    // if last element is also
    // an odd number then
    // we can choose odd
    // elements for our answer
    if (odd > 0 && odd % 2 != 0) {
 
        // Add 1 in the array (k-1) times
        for (int i = 0; i < k - 1; i++) {
            ans.push_back(1);
        }
 
        // Add last odd element
        ans.push_back(odd);
    }
 
    // If array of even elements
    // would be the answer then
    // k-1 elements would be 2
    int even = n - ((k - 1) * 2);
 
    // if last element is also
    // an even number then
    // we can choose even
    // elements for our answer
    if (even > 0 && even % 2 == 0 && ans.size() == 0) {
 
        // Add 2 in the array (k-1) times
        for (int i = 0; i < k - 1; i++) {
            ans.push_back(2);
        }
 
        // Add last even element
        ans.push_back(even);
    }
 
    // Printing the array
    if (ans.size() > 0) {
        for (int i = 0; i < k; i++) {
            cout << ans[i] << " ";
        }
    }
    else {
        cout << "NO" << endl;
    }
}
 
// Driver Code
int main()
{
    int n = 10, k = 3;
    getArrayOfSizeK(n, k);
 
    return 0;
}

Java

// Java implementation to find an
// array of size K with all the
// even or odd elements in the array
import java.util.*;
 
class GFG {
 
    // Function to find the array with
    // all the even / odd elements
    static void getArrayOfSizeK(int n, int k)
    {
        Vector<Integer> ans = new Vector<Integer>();
 
        // If array could be constructed
        // by adding odd elements
        // we need to find the kth
        // element is odd or even
 
        // If array of odd elements
        // would be the answer then
        // k-1 elements would be 1
 
        // First let's check
        // kth is odd or even
        int odd = n - ((k - 1) * 1);
 
        // If last element is also
        // an odd number then
        // we can choose odd
        // elements for our answer
        if (odd > 0 && odd % 2 != 0) {
 
            // Add 1 in the array (k-1) times
            for (int i = 0; i < k - 1; i++) {
                ans.add(1);
            }
 
            // Add last odd element
            ans.add(odd);
        }
 
        // If array of even elements
        // would be the answer then
        // k-1 elements would be 2
        int even = n - ((k - 1) * 2);
 
        // If last element is also
        // an even number then
        // we can choose even
        // elements for our answer
        if (even > 0 && even % 2 == 0 && ans.size() == 0) {
 
            // Add 2 in the array (k-1) times
            for (int i = 0; i < k - 1; i++) {
                ans.add(2);
            }
 
            // Add last even element
            ans.add(even);
        }
 
        // Printing the array
        if (ans.size() > 0) {
            for (int i = 0; i < k; i++) {
                System.out.print(ans.get(i) + " ");
            }
        }
        else {
            System.out.println("NO");
        }
    }
 
    // Driver code
    public static void main(String args[])
    {
        int n = 10, k = 3;
 
        getArrayOfSizeK(n, k);
    }
}
 
// This code is contributed by Surendra_Gangwar

Python3

# Python 3 implementation to find an
# array of size K with all the
# even or odd elements in the array
 
# Function to find the array with
# all the even / odd elements
 
 
def getArrayOfSizeK(n, k):
 
    ans = []
 
    # If array could be constructed
    # by adding odd elements
    # we need to find the kth
    # element is odd or even
 
    # if array of odd elements
    # would be the answer then
    # k-1 elements would be 1
 
    # First let's check
    # kth is odd or even
    odd = n - ((k - 1) * 1)
 
    # if last element is also
    # an odd number then
    # we can choose odd
    # elements for our answer
    if (odd > 0
            and odd % 2 != 0):
 
        # Add 1 in the array (k-1) times
        for i in range(k - 1):
            ans.append(1)
 
        # Add last odd element
        ans.append(odd)
 
    # If array of even elements
    # would be the answer then
    # k-1 elements would be 2
    even = n - ((k - 1) * 2)
 
    # if last element is also
    # an even number then
    # we can choose even
    # elements for our answer
    if (even > 0
        and even % 2 == 0
            and len(ans) == 0):
 
        # Add 2 in the array (k-1) times
        for i in range(k - 1):
            ans.append(2)
 
        # Add last even element
        ans.append(even)
 
    # Printing the array
    if (len(ans) > 0):
        for i in range(k):
            print(ans[i], end=" ")
 
    else:
        print("NO")
 
 
# Driver Code
if __name__ == "__main__":
    n, k = 10, 3
    getArrayOfSizeK(n, k)
 
# This code is contributed by chitranayal

C#

// C# implementation to find an
// array of size K with all the
// even or odd elements in the array
using System;
using System.Collections.Generic;
 
class GFG {
 
    // Function to find the array with
    // all the even / odd elements
    static void getArrayOfSizeK(int n, int k)
    {
        List<int> ans = new List<int>();
 
        // If array could be constructed
        // by adding odd elements
        // we need to find the kth
        // element is odd or even
 
        // If array of odd elements
        // would be the answer then
        // k-1 elements would be 1
 
        // First let's check
        // kth is odd or even
        int odd = n - ((k - 1) * 1);
 
        // If last element is also
        // an odd number then
        // we can choose odd
        // elements for our answer
        if (odd > 0 && odd % 2 != 0) {
 
            // Add 1 in the array (k-1) times
            for (int i = 0; i < k - 1; i++) {
                ans.Add(1);
            }
 
            // Add last odd element
            ans.Add(odd);
        }
 
        // If array of even elements
        // would be the answer then
        // k-1 elements would be 2
        int even = n - ((k - 1) * 2);
 
        // If last element is also
        // an even number then
        // we can choose even
        // elements for our answer
        if (even > 0 && even % 2 == 0 && ans.Count == 0) {
 
            // Add 2 in the array (k-1) times
            for (int i = 0; i < k - 1; i++) {
                ans.Add(2);
            }
 
            // Add last even element
            ans.Add(even);
        }
 
        // Printing the array
        if (ans.Count > 0) {
            for (int i = 0; i < k; i++) {
                Console.Write(ans[i] + " ");
            }
        }
        else {
            Console.WriteLine("NO");
        }
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int n = 10, k = 3;
 
        getArrayOfSizeK(n, k);
    }
}
 
// This code is contributed by amal kumar choubey

Javascript

<script>
// Javascript implementation to find an
// array of size K with all the
// even or odd elements in the array
 
// Function to find the array with
// all the even / odd elements
function getArrayOfSizeK(n, k)
{
    let ans = [];
   
    // If array could be constructed
    // by adding odd elements
    // we need to find the kth
    // element is odd or even
   
    // If array of odd elements
    // would be the answer then
    // k-1 elements would be 1
   
    // First let's check
    // kth is odd or even
    let odd = n - ((k - 1) * 1);
   
    // If last element is also
    // an odd number then
    // we can choose odd
    // elements for our answer
    if (odd > 0 && odd % 2 != 0)
    {
           
        // Add 1 in the array (k-1) times
        for(let i = 0; i < k - 1; i++)
        {
           ans.push(1);
        }
   
        // Add last odd element
        ans.push(odd);
    }
   
    // If array of even elements
    // would be the answer then
    // k-1 elements would be 2
    let even = n - ((k - 1) * 2);
   
    // If last element is also
    // an even number then
    // we can choose even
    // elements for our answer
    if (even > 0 && even % 2 == 0 &&
                  ans.length == 0)
    {
   
        // Add 2 in the array (k-1) times
        for(let i = 0; i < k - 1; i++)
        {
           ans.push(2);
        }
   
        // Add last even element
        ans.push(even);
    }
   
    // Printing the array
    if (ans.length > 0)
    {
        for(let i = 0; i < k; i++)
        {
           document.write(ans[i] + " ");
        }
    }
    else
    {
        document.write("NO");
    }
}
 
  // Driver Code
    let n = 10, k = 3;
    getArrayOfSizeK(n, k);
   
  // This code is contributed by target_2.
</script>

Go

// Go implementation to find an
// array of size K with all the
// even or odd elements in the array
package main
   
import "fmt"
 
// Function to find the array with
// all the even / odd elements
func getArrayOfSizeK(n, k int) {
     
    ans := make([]int, 0)
     
    // If array could be constructed
    // by adding odd elements
    // we need to find the kth
    // element is odd or even
    
    // If array of odd elements
    // would be the answer then
    // k-1 elements would be 1
    
    // First let's check
    // kth is odd or even
    odd := n - ((k - 1) * 1)
     
    if odd > 0 && odd % 2 != 0 {
            
        // Add 1 in the array (k-1) times
        for i := 0; i < k - 1; i++ {
           ans = append(ans, 1)
        }
    
        // Add last odd element
        ans = append(ans, odd)
    }
     
    // If array of even elements
    // would be the answer then
    // k-1 elements would be 2
    even := n - ((k - 1) * 2)
  
    // if last element is also
    // an even number then
    // we can choose even
    // elements for our answer
    if even > 0 && even % 2 == 0 && len(ans) == 0 {
  
        // Add 2 in the array (k-1) times
        for i := 0; i < k - 1; i++ {
            ans = append(ans, 2)
        }
  
        // Add last even element
        ans = append(ans, even)
    }
  
    // Printing the array
    if len(ans) > 0 {
        for i := 0; i < k; i++ {
            fmt.Print(ans[i], " ")
        }
    } else {
        fmt.Println("NO")
    }
}
   
// Driver Code
func main() {
    n, k := 10, 3;
    getArrayOfSizeK(n, k);
}
Producción: 

2 2 6

 

Complejidad de tiempo: O(k), donde k representa el entero dado.
Espacio Auxiliar: O(k), donde k representa el entero dado.

Publicación traducida automáticamente

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