Represent N as sum of K even or K odd numbers with repetitions allowed
Given two integer N and K, the task is to find an array of size K containing only even or odd elements where the sum of all the elements of the array is N. If there is no such array print “No”.
Examples:
Input: N = 18, K = 3
Output: 6 6 6
Input: N = 19, K = 5
Output: 3 3 3 3 7
Approach: The idea is to choose the smallest even or odd number K-1 times and Finally, compute the last number with the help of total sum. If the last number is also even for the even number and odd for the smallest odd number. Then it is possible to choose such an array. Otherwise, there is no such array possible.
Below is the implementation of the above approach:
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); } |
2 2 6
Time Complexity: O(k), where k represents the given integer.
Auxiliary Space: O(k), where k represents the given integer.
Please Login to comment...