#include<iostream> #include<cstdio> using namespace std; int a[12];int n; int SUM(int i){ int sum=0; for(int j=1;j<=i;++j) sum+=a[j]; return sum; } int result[31];int r; void solve(int m,int k){ int i,j; for(i=m;i>=1;i--) { result[k]=i;//第k个位置可以排 m,m-1,...1 if(k>1) solve(i,k-1);//递归排第k-1个位置,... else { int temp=0; for(j=1;j<=r;j++) temp+=result[j];//k个位置之和 if(temp==n)//当前组合是整数N的一个拆分 { for(j=1;j<= r;j++) printf("%4d",result[j]); printf("/n"); } } } } int main(int argc, char *argv[]) { n=10; for( r=n;r>0;r--) solve(n,r); solve(4,4); return 0; }