#include<iostream>
using namespace std;
int *arr;
int n;
void print()
{
    cout << n << ” =
” << arr[0];
    int i = 1;
    while(arr[i])
        cout << ” +
” << arr[i++];
    cout << endl;
}

void process(int arr[], int max, int n)//n为剩余值,max为当前位置可以为最大的数。
{
    arr[0] = max < n ? max :
n;
    if(n == 0)
    {
        print();
    }
    for(arr[0]; arr[0]>0; –arr[0])
        process(arr+1, arr[0], n-arr[0]);
    arr[0] = 0;
}
int main()
{
    cout << “Please input
a integer:”;
    cin >> n;
    arr = new int[n+1];//多出来一个当哨兵
    if(arr)
    {
        for (int i = 0; i != n; ++i)
            arr[i] = 0;

        process(arr, n, n);

        delete [] arr;
    }
    else
    {
        cerr << “memory alloc
error” << endl;//英语很烂
    }
    return 0;
}

相关文章