Represent N as sum of K even or K odd numbers with repetitions allowed
Last Updated :
04 Jul, 2022
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++
#include <bits/stdc++.h>
using namespace std;
void getArrayOfSizeK( int n, int k)
{
vector< int > ans;
int odd = n - ((k - 1) * 1);
if (odd > 0 && odd % 2 != 0) {
for ( int i = 0; i < k - 1; i++) {
ans.push_back(1);
}
ans.push_back(odd);
}
int even = n - ((k - 1) * 2);
if (even > 0 && even % 2 == 0 && ans.size() == 0) {
for ( int i = 0; i < k - 1; i++) {
ans.push_back(2);
}
ans.push_back(even);
}
if (ans.size() > 0) {
for ( int i = 0; i < k; i++) {
cout << ans[i] << " " ;
}
}
else {
cout << "NO" << endl;
}
}
int main()
{
int n = 10, k = 3;
getArrayOfSizeK(n, k);
return 0;
}
|
Java
import java.util.*;
class GFG {
static void getArrayOfSizeK( int n, int k)
{
Vector<Integer> ans = new Vector<Integer>();
int odd = n - ((k - 1 ) * 1 );
if (odd > 0 && odd % 2 != 0 ) {
for ( int i = 0 ; i < k - 1 ; i++) {
ans.add( 1 );
}
ans.add(odd);
}
int even = n - ((k - 1 ) * 2 );
if (even > 0 && even % 2 == 0 && ans.size() == 0 ) {
for ( int i = 0 ; i < k - 1 ; i++) {
ans.add( 2 );
}
ans.add(even);
}
if (ans.size() > 0 ) {
for ( int i = 0 ; i < k; i++) {
System.out.print(ans.get(i) + " " );
}
}
else {
System.out.println( "NO" );
}
}
public static void main(String args[])
{
int n = 10 , k = 3 ;
getArrayOfSizeK(n, k);
}
}
|
Python3
def getArrayOfSizeK(n, k):
ans = []
odd = n - ((k - 1 ) * 1 )
if (odd > 0
and odd % 2 ! = 0 ):
for i in range (k - 1 ):
ans.append( 1 )
ans.append(odd)
even = n - ((k - 1 ) * 2 )
if (even > 0
and even % 2 = = 0
and len (ans) = = 0 ):
for i in range (k - 1 ):
ans.append( 2 )
ans.append(even)
if ( len (ans) > 0 ):
for i in range (k):
print (ans[i], end = " " )
else :
print ( "NO" )
if __name__ = = "__main__" :
n, k = 10 , 3
getArrayOfSizeK(n, k)
|
C#
using System;
using System.Collections.Generic;
class GFG {
static void getArrayOfSizeK( int n, int k)
{
List< int > ans = new List< int >();
int odd = n - ((k - 1) * 1);
if (odd > 0 && odd % 2 != 0) {
for ( int i = 0; i < k - 1; i++) {
ans.Add(1);
}
ans.Add(odd);
}
int even = n - ((k - 1) * 2);
if (even > 0 && even % 2 == 0 && ans.Count == 0) {
for ( int i = 0; i < k - 1; i++) {
ans.Add(2);
}
ans.Add(even);
}
if (ans.Count > 0) {
for ( int i = 0; i < k; i++) {
Console.Write(ans[i] + " " );
}
}
else {
Console.WriteLine( "NO" );
}
}
public static void Main(String[] args)
{
int n = 10, k = 3;
getArrayOfSizeK(n, k);
}
}
|
Javascript
<script>
function getArrayOfSizeK(n, k)
{
let ans = [];
let odd = n - ((k - 1) * 1);
if (odd > 0 && odd % 2 != 0)
{
for (let i = 0; i < k - 1; i++)
{
ans.push(1);
}
ans.push(odd);
}
let even = n - ((k - 1) * 2);
if (even > 0 && even % 2 == 0 &&
ans.length == 0)
{
for (let i = 0; i < k - 1; i++)
{
ans.push(2);
}
ans.push(even);
}
if (ans.length > 0)
{
for (let i = 0; i < k; i++)
{
document.write(ans[i] + " " );
}
}
else
{
document.write( "NO" );
}
}
let n = 10, k = 3;
getArrayOfSizeK(n, k);
</script>
|
Go
package main
import "fmt"
func getArrayOfSizeK(n, k int) {
ans := make([]int, 0 )
odd := n - ((k - 1 ) * 1 )
if odd > 0 && odd % 2 != 0 {
for i := 0 ; i < k - 1 ; i++ {
ans = append(ans, 1 )
}
ans = append(ans, odd)
}
even := n - ((k - 1 ) * 2 )
if even > 0 && even % 2 == 0 && len(ans) == 0 {
for i := 0 ; i < k - 1 ; i++ {
ans = append(ans, 2 )
}
ans = append(ans, even)
}
if len(ans) > 0 {
for i := 0 ; i < k; i++ {
fmt.Print(ans[i], " " )
}
} else {
fmt.Println( "NO" )
}
}
func main() {
n, k := 10 , 3 ;
getArrayOfSizeK(n, k);
}
|
Time Complexity: O(k), where k represents the given integer.
Auxiliary Space: O(k), where k represents the given integer.
Share your thoughts in the comments
Please Login to comment...