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.