33,028
社区成员




#include <cstdlib>
#include <iostream>
using namespace std;
int *Road;
void f( int sum, int level ){
if( sum==0 ){
for( int i=1; i<=level; ++i )
cout<<Road[i]<<" ";
cout<<endl;
return;
}
for( int j=min(sum,Road[level]); j>=1; --j ){
Road[level+1]=j;
f( sum-j, level+1 );
}
}
int main()
{
int n;
cin>>n;
Road=new int[n+1];
Road[0]=n;
f( n, 0 );
delete []Road;
system("PAUSE");
return EXIT_SUCCESS;
}
void Partition( int n ){
int *List=new int[n+1], q=0, m=1, t, j;
List[0]=n;
while( 1 ){
copy( List, List+m, ostream_iterator<int>cout," "));cout<<endl;
if( q<0 ) return ;
if( List[q]==2 )
--List[q--], List[m++]=1;
else{
--List[q]; t=m-q;
for( j=1; j<=t/List[q]; ++j )
List[q+j]=List[q];
if( t%List[q]==0 )
m=q+j, q=m-1;
else
m=q+j+1, List[q+j]=t%List[q], List[q+j]==1? q=m-2 : q=m-1;
}
}
delete []List;
}