题目描述
当n=7共14种拆分方法:参考输出样例
输入
输出
相邻两组样例之间输出一个空行。
样例输入 Copy
2
7
样例输出 Copy
2=1+1
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
#include<iostream> #include<cstdio> using namespace std; int n; int a[1000]; void dfs(int x,int u)//x表示第几个位置,u表示剩下的数(就是n减去前一个位置的数剩下的数) { if(u==0&&x>2)//如果剩下的数为0了而且最起码有2个位置 { printf("%d=",n);//输出格式 for(int i=1;i<x-1;i++) { printf("%d+",a[i]); } printf("%d\n",a[x-1]);//单独输出最后一个数,因为最后一个数的后面没有加号 return ; } for(int i=1;i<=u;i++) { if(i>=a[x-1])//剩下的数要大于等于前面位置上的那个数,这是为了顺序 { a[x]=i;//数组中x的位置为i u=u-i;//剩余的数减去i dfs(x+1,u); //回溯 a[x]=0; u=u+i; } } } int main() { while(cin>>n)//输入n { a[0]=1;//算式中第一个数是1 dfs(1,n); printf("\n"); } return 0; }