Разбиение натурального числа на слагаемые

Построить таблицу всех различных разбиений заданного натурального числа N на сумму трех натуральных слагаемых (разбиения, отличающиеся порядком слагаемых, различными не считаются).

Исходный код на языке C++
#include <iostream>

int main()
{
    std::cout << "Enter a natural number: ";

    unsigned int N;

    std::cin >> N;

    std::cout << "The number " << N << " can be present by next three summands:\n";

    unsigned int limit_1_summand = (N / 3) + 1;
    unsigned int limit_2_summand;

    for (unsigned int i = 0; i < limit_1_summand; i++) {

        limit_2_summand = ((N - i) / 2) + 1;

        for (unsigned int j = i; j < limit_2_summand; j++) {

            std::cout << i << " " << j << " " << N - i - j << std::endl;

        }
    }

    std::cin.get();
    std::cin.get();

    return 0;
}
Источник: code-live.ru