输入样例:
7
输出样例:
7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
7=2+5;7=3+4;7=7
#include <stdio.h>
int N;
int sum=0;//累加和
int top=-1;//下标
int count=0;//计数:一行%4
//循环计数变量
int a[31];//数组存1 to N
void dfs(int x)
{
int i,j;
if(sum==N)//sum等于N,则输出格式要求的式子
{
count++; //sum等于N,即计数一次
printf("%d=",N);//N=…+…+…+…
for(i=0;i<top;i++)//输出前面的若干项,除了最后一项
{
printf("%d+",a[i]);
}
if(count%4==0||a[top]==N)
{
printf("%d\n",a[top]);
}
else
printf("%d;",a[top]);
return;//输出完一次(即sum=N),出口
}
if(sum>N)
return;//递归出口,跳出函数
for(j=x;j<=N;j++)
{
a[++top]=j;
sum+=j;
dfs(j);//递归层层叠加,需要出口(返回上一层)
sum-=j;//继续执行,减少前面一个循环的j,因为前一句指令dfs()函数执行完,返回当前一层
top--;//top退回
}
}
int main()
{
scanf("%d",&N);
dfs(1);
return 0;
}