Find K numbers with sum equal to N and sum of their squares maximized
Last Updated :
22 Mar, 2021
Given two integers N and K, the task is to find K numbers(A1, A2, …, AK) such that ?i=1KAi is equal to N and ?i=1KAi2 is maximum.
Examples:
Input: N = 3, K = 2
Output: 1 2
Explanation: The two numbers are 1 and 2 as their sum is equal to N and 12 + 22 is maximum.
Input: N = 10, K = 3
Output: 1 8 1
Approach: The idea is to take number 1, K – 1 times and number N – K + 1 once. The sum of these numbers is equal to N and sum of squares of these numbers is always maximum. For any two non-negative numbers a and b, (a2 + b2) is always less than 1 + (a + b – 1)2.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void printKNumbers( int N, int K)
{
for ( int i = 0; i < K - 1; i++)
cout << 1 << " " ;
cout << (N - K + 1);
}
int main()
{
int N = 10, K = 3;
printKNumbers(N, K);
return 0;
}
|
Java
class GFG{
static void printKNumbers( int N, int K)
{
for ( int i = 0 ; i < K - 1 ; i++)
System.out.print( 1 + " " );
System.out.print(N - K + 1 );
}
public static void main(String[] args)
{
int N = 10 , K = 3 ;
printKNumbers(N, K);
}
}
|
Python3
def printKNumbers(N, K):
for i in range (K - 1 ):
print ( 1 , end = ' ' )
print (N - K + 1 )
if __name__ = = '__main__' :
(N, K) = ( 10 , 3 )
printKNumbers(N, K)
|
C#
using System;
class GFG{
static void printKNumbers( int N, int K)
{
for ( int i = 0; i < K - 1; i++)
Console.Write(1 + " " );
Console.Write(N - K + 1);
}
public static void Main(String[] args)
{
int N = 10, K = 3;
printKNumbers(N, K);
}
}
|
Javascript
<script>
function printKNumbers(N, K)
{
for (let i = 0; i < K - 1; i++)
document.write(1 + " " );
document.write(N - K + 1);
}
let N = 10, K = 3;
printKNumbers(N, K);
</script>
|
Time Complexity: O(K)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...