Given an integer N, the task is to find N distinct integers whose sum is N. If there is more than one combination of the integers, print any one of them.
Examples:
Input: N = 3
Output: 1, -1, 3
Explanation:
On adding the numbers that is 1 + (-1) + 3 the sum is 3.Input: N = 4
Output: 1, -1, 0, 4
Explanation:
On adding the numbers that is 1 + (-1) + 0 + (4) the sum is 4.
Approach: The idea is to print N/2 Symmetric Pairs like (+x, -x) so that the resultant sum will always be 0.
Now if integer N is odd, then print N along with these set of integers to make sum of all integers equals to N
If N is even, print 0 and N along with these set of integers to make sum of all integers equals to N.
Below is the implementation of the above approach:
// C++ for the above approach #include <bits/stdc++.h> using namespace std;
// Function to print distinct N // numbers whose sum is N void findNumbers( int N)
{ // To store how many symmetric
// pairs needs to be calculated
int half = N / 2;
// For even N we have to print
// one less symmetric pair
if (N % 2 == 0) {
half--;
}
// Iterate till [1 n/2] and Print
// all symmetric pairs(i, -i)
for ( int i = 1; i <= half; i++) {
// Print 2 symmetric numbers
cout << (-1) * i
<< ", " << i << ", " ;
}
// if N is Odd, then print N
if (N & 1) {
cout << N << endl;
}
// Else print(0, N)
else {
cout << 0 << ", "
<< N << endl;
}
} // Driver Code int main()
{ // Given Sum
int N = 5;
// Function Call
findNumbers(N);
return 0;
} |
// Java for the above approach class GFG{
// Function to print distinct N // numbers whose sum is N public static void findNumbers( int N)
{ // To store how many symmetric
// pairs needs to be calculated
int half = N / 2 ;
// For even N we have to print
// one less symmetric pair
if (N % 2 == 0 )
{
half--;
}
// Iterate till [1 n/2] and Print
// all symmetric pairs(i, -i)
for ( int i = 1 ; i <= half; i++)
{
// Print 2 symmetric numbers
System.out.print((- 1 ) * i + ", " +
i + ", " );
}
// if N is Odd, then print N
int check = N & 1 ;
if (check != 0 )
{
System.out.println(N);
}
// Else print(0, N)
else
{
System.out.println( 0 + ", " + N);
}
} // Driver code public static void main(String[] args)
{ // Given sum
int N = 5 ;
// Function sall
findNumbers(N);
} } // This code is contributed by divyeshrabadiya07 |
# Python3 code for the above approach # Function to print distinct N # numbers whose sum is N def findNumbers(N):
# To store how many symmetric
# pairs needs to be calculated
half = int (N / 2 )
# For even N we have to print
# one less symmetric pair
if (N % 2 = = 0 ):
half = half - 1
# Iterate till [1 n/2] and Print
# all symmetric pairs(i, -i)
for i in range ( 1 , half + 1 ):
# Print 2 symmetric numbers
print (( - 1 ) * i, end = ', ' )
print (i, end = ', ' )
# If N is Odd, then print N
if (N & 1 ):
print (N, end = '\n' )
# Else print(0, N)
else :
print ( 0 , end = ', ' )
print (N, end = '\n' )
# Driver Code N = 5
# Function Call findNumbers(N) # This code is contributed by PratikBasu |
// C# for the above approach using System;
class GFG{
// Function to print distinct N // numbers whose sum is N public static void findNumbers( int N)
{ // To store how many symmetric
// pairs needs to be calculated
int half = N / 2;
// For even N we have to print
// one less symmetric pair
if (N % 2 == 0)
{
half--;
}
// Iterate till [1 n/2] and Print
// all symmetric pairs(i, -i)
for ( int i = 1; i <= half; i++)
{
// Print 2 symmetric numbers
Console.Write((-1) * i + ", " +
i + ", " );
}
// if N is Odd, then print N
int check = N & 1;
if (check != 0)
{
Console.Write(N + "\n" );
}
// Else print(0, N)
else
{
Console.Write(0 + ", " + N + "\n" );
}
} // Driver code public static void Main( string [] args)
{ // Given sum
int N = 5;
// Function sall
findNumbers(N);
} } // This code is contributed by rutvik_56 |
<script> // javascript program for the above approach // Function to print distinct N // numbers whose sum is N function findNumbers( N)
{ // To store how many symmetric
// pairs needs to be calculated
let half = parseInt(N / 2);
// For even N we have to print
// one less symmetric pair
if (N % 2 == 0) {
half--;
}
// Iterate till [1 n/2] and Print
// all symmetric pairs(i, -i)
for (let i = 1; i <= half; i++) {
// Print 2 symmetric numbers
document.write( (-1) * i
+ ", " + i + ", " );
}
// if N is Odd, then print N
if (N & 1) {
document.write( N);
}
// Else print(0, N)
else {
document.write( 0 + ", "
+ N + "<br/>" );
}
} // Driver Code // Given Sum
let N = 5;
// Function Call
findNumbers(N);
// This code contributed by aashish1995
</script> |
Output:
-1,1,-2,2,5
Time Complexity: O(N/2) which is asymptotically same as O(N).
Space Complexity: O(1) as no extra space has been used.