题目分析: 分析数字变化,可以发现是一个深度优先过程。注意返回条件即可。
#include<stdio.h>
int n,sum=0,stack[30],sTop=-1,flag=0;
void DFS(int x);
void push(int x){
stack[++sTop]=x,sum+=x;
}
void pop(void){
sum-=stack[sTop--];
}
int main()
{
scanf("%d",&n);
DFS(1); //从小到达不停搜,直到被限制后return.
return 0;
}
void DFS(int x)
{
while (sum+x<=n&&x>=stack[sTop]) //累积不超过要求,后位比前位小
push(x),DFS(x++);
if(sum==n)
{
printf("%d=%d",n,stack[0]);
for(int i=1;i<=sTop;i++)
printf("+%d",stack[i]);
if(++flag%4==0)putchar('\n');
else if(stack[0]!=n)putchar(';');
}
pop();
}