Given a number n, find the number of ways in which we can add 3 non-negative integers so that their sum is n.
Examples :
Input : n = 1
Output : 3
There are three ways to get sum 1.
(1, 0, 0), (0, 1, 0) and (0, 0, 1)
Input : n = 2
Output : 6
There are six ways to get sum 2.
(2, 0, 0), (0, 2, 0), (0, 0, 2), (1, 1, 0)
(1, 0, 1) and (0, 1, 1)
Input : n = 3
Output : 10
There are ten ways to get sum 3.
(3, 0, 0), (0, 3, 0), (0, 0, 3), (1, 2, 0)
(1, 0, 2), (0, 1, 2), (2, 1, 0), (2, 0, 1),
(0, 2, 1) and (1, 1, 1)
Method 1 [ Brute Force : O(n3) ]
A simple solution is to consider all triplets using three loops. For every triplet, check if its sum is equal to n. If the sum is n, increment the count of solutions.
Below is the implementation.
C++
#include<bits/stdc++.h>
using namespace std;
int countIntegralSolutions( int n)
{
int result = 0;
for ( int i=0; i<=n; i++)
for ( int j=0; j<=n-i; j++)
for ( int k=0; k<=(n-i-j); k++)
if (i + j + k == n)
result++;
return result;
}
int main()
{
int n = 3;
cout << countIntegralSolutions(n);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int countIntegralSolutions( int n)
{
int result = 0 ;
for ( int i = 0 ; i <= n; i++)
for ( int j = 0 ; j <= n - i; j++)
for ( int k = 0 ; k <= (n - i - j); k++)
if (i + j + k == n)
result++;
return result;
}
public static void main (String[] args)
{
int n = 3 ;
System.out.println( countIntegralSolutions(n));
}
}
|
Python3
def countIntegralSolutions (n):
result = 0
for i in range (n + 1 ):
for j in range (n + 1 ):
for k in range (n + 1 ):
if i + j + k = = n:
result + = 1
return result
n = 3
print (countIntegralSolutions(n))
|
C#
using System;
class GFG {
static int countIntegralSolutions( int n)
{
int result = 0;
for ( int i = 0; i <= n; i++)
for ( int j = 0; j <= n - i; j++)
for ( int k = 0; k <= (n - i - j); k++)
if (i + j + k == n)
result++;
return result;
}
public static void Main ()
{
int n = 3;
Console.Write(countIntegralSolutions(n));
}
}
|
PHP
<?php
function countIntegralSolutions( $n )
{
$result = 0;
for ( $i = 0; $i <= $n ; $i ++)
for ( $j = 0; $j <= $n - $i ; $j ++)
for ( $k = 0; $k <= ( $n - $i - $j ); $k ++)
if ( $i + $j + $k == $n )
$result ++;
return $result ;
}
$n = 3;
echo countIntegralSolutions( $n );
?>
|
Javascript
<script>
function countIntegralSolutions(n)
{
let result = 0;
for (let i = 0; i <= n; i++)
for (let j = 0; j <= n - i; j++)
for (let k = 0; k <= (n - i - j); k++)
if (i + j + k == n)
result++;
return result;
}
let n = 3;
document.write(countIntegralSolutions(n));
</script>
|
Output:
10
Time complexity: O(n3)
Auxiliary Space: O(1)
Method 2 [ Direct Formula : O(1) ]
If we take a closer look at the pattern, we can find that the count of solutions is ((n+1) * (n+2)) / 2. The problem is equivalent to distributing n identical balls in three boxes and the solution is n+2C2. In general, if there are m variables (or boxes) and n balls , the formula becomes n+m-1Cm-1.
C++
#include<bits/stdc++.h>
using namespace std;
int countIntegralSolutions( int n)
{
return ((n+1)*(n+2))/2;
}
int main()
{
int n = 3;
cout << countIntegralSolutions(n);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int countIntegralSolutions( int n)
{
return ((n + 1 ) * (n + 2 )) / 2 ;
}
public static void main (String[] args)
{
int n = 3 ;
System.out.println ( countIntegralSolutions(n));
}
}
|
Python3
def countIntegralSolutions (n):
return int (((n + 1 ) * (n + 2 )) / 2 )
n = 3
print (countIntegralSolutions(n))
|
C#
using System;
class GFG {
static int countIntegralSolutions( int n)
{
return ((n + 1) * (n + 2)) / 2;
}
public static void Main (String[] args)
{
int n = 3;
Console.Write ( countIntegralSolutions(n));
}
}
|
PHP
<?php
function countIntegralSolutions( $n )
{
return (( $n + 1) * ( $n + 2)) / 2;
}
$n = 3;
echo countIntegralSolutions( $n );
?>
|
Javascript
<script>
function countIntegralSolutions(n)
{
return Math.floor(((n+1)*(n+2))/2);
}
let n = 3;
document.write(countIntegralSolutions(n));
</script>
|
Output :
10
Time complexity: O(1)
Auxiliary Space: O(1)
This article is contributed by Shivam Gupta. If you like neveropen and would like to contribute, you can also write an article and mail your article to review-team@geeksforgeeks.org. See your article appearing on the neveropen main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!