#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;
}
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;
}
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.