CCF NOI1077(自然数的拆分问题 )

1077. 自然数的拆分问题 (Standard IO)

时间限制: 1000 ms  空间限制: 262144 KB  具体限制 

题目描述

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。拆分成的数字相同但顺序不同被看做是相同的方案,如果1+3与3+1被看做是同一种方案。

输入

输入待拆分的自然数n。

输出

如样例输出若干个拆分方案(具体见样例)。

样例输入

7

样例输出

1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+2+2
1+2+4
1+3+3
1+6
2+2+3
2+5
3+4

数据范围限制

1<=n<=20

分析:递归做。

#include<cstdio>
int a[30],N;
void f(int j,int res,int k)
{
    if(res==0) 
    {
        for(int i=0;i<k-1;i++)
            printf("%d+",a[i]);
        printf("%d
",a[k-1]);
    }
    for(int i=j;i<=res;i++)
    {a[k]=i;f(i,res-i,k+1);} 
}

int main()
{
    scanf("%d",&N);
    for(int i=1;i<=N/2;i++)
    {
        a[0]=i;f(i,N-i,1);
    }
    return 0;
}
View Code