#include <iostream>
using namespace std;void divide(int target,int a[],int last_num)
{
if(target<0)
return ;
if(target==0)
{
for(int i=0;i<4;i++)
if(a[i]==1)
cout<<i+1<<"\t";
cout<<endl;
return ;
}
for(int i=last_num;i<4;i++)
if(a[i]==0)
{
a[i]=1;
divide(target-i-1,a,i);
a[i]=0;
}
}int  main()
{
int a[4]={0};
for(int i=1;i<=10;i++)
{
cout<<i<<":\t";
divide(i,a,0);
}
return 0;
}

解决方案 »

  1.   

    呵呵,C++的,没去搞http://lysoft.7u7.net
      

  2.   

    procedure divide(target:Integer; a:arrar[] of Integer; last_num:Integer);
    var 
    i:Integer;
    begin
    if target < 0 then
    exit;
    if target = 0 
    begin
    for i := 0 to 3 do
    if a[i] = 1 then
    writeln(i+1);
    writeln('');
    exit;
    end;
    for i := last_num to 3 do
    begin
    if a[i] = 0 then
    begin
    a[i] := 1;
    divide(target - i - 1, a, i);
    a[i] := 0;
    end;
    end;
    end;
    program test;var 
    a:array[0..3] of Integer;
    i:Integer;begin
    for i := 1 to 10 do
    begin
    writeln(i);
    divide(i, a, 0);
    end;
    end.