//回溯法解决数字拆解的问题
#include<iostream>
using namespace std;

const int N = 6;
void OutPut( int* a, int N )
{
    for( int i = N-1; i > 0; i-- )
    {
        for( int j = 0; j < a[i]; j++ )
        cout<<i<<"  ";
    }
    cout<<endl;
}
void Solve(int* a, int t, int sum )
{
    if( sum == 0)
    OutPut(a, N );
    else
    {
        if( t == 0 )
        return;
        else
        {
           if( sum - t >=0 )
           {
               a[t]++;
               Solve(a, t, sum-t);
               a[t]--;
           }
           Solve(a, t-1, sum);
        }
    }
}
int main()
{
    int array[N] = {0};
    Solve(array, N-1,N-1);
    return 0;
}

wKioL1UHnO3iygHvAABPXpc3lnU585.jpg