C++ Program to Find the Number of Ways to Write a Number as the Sum of Numbers Smaller than Itself

In this program we will count the number of ways one number can be represented by sum of numbers smaller than itself. This program will count the partition of given numbers. We take a number n as input, then starting from a number break it by removing 1 at a time. If the new partition is generated, increase the counter.



Input : The number n

Output : The number of partitions

   Create array p of size n
   k := 0
   count := -1
   put n as the first element of array p
   Repeat the following steps, do
   increase count by 1
   rem := 0
   while k >= 0 and p[k] = 1, do
      rem := rem + p[k]
      decrease k by 1
   if k < 0, then
      return count
      p[k] := p[k] – 1
      rem := rem + 1
      while rem >= p[k], do
         p[k+1] := p[k]
         rem := rem - p[k]
         increase k by 1
      p[k+1] := rem
      increase k by 1

Example Code

using namespace std;
int partitionCount(int n){ //used to count all possible partitions
   int p[n], k = 0, count = -1;
   p[k] = n; //add n as the first element of array
   while(true) { //repeat untill all elements are turned to 1
      int rem = 0;
      while (k >= 0 && p[k] == 1){ // Move the pointer to the correct index where p[k] > 1.
         rem += p[k];
      if (k < 0) // If k < 0 then the all the element are broken down to 1.
         return count;
         //otherwise decrease the value by 1, and increase rem
      while (rem > p[k]) { // repeat until the number of 1's are greater than the value at k index.
         p[k+1] = p[k];
         rem -= p[k]; // Decrease the rem_val value.
      p[k+1] = rem; // Assign remaining value to the index next to k.
main() {
   int n, c;
   cout<<"Enter number for partition counting: ";
   if (n <= 0) { //n must be greater than or equal to 1
      cout<<"Invalid value of n";
   c = partitionCount(n);
   cout<<"The number of partitions: "<<c;


Enter number for partition counting: 7
The number of partitions: 14

Updated on: 30-Jul-2019


Kickstart Your Career

Get certified by completing the course

Get Started