題目描述
一個正整數N(N<=20)可以劃分成若干個正整數的和的形式,例如5可以劃分成以下幾種形式:
5=1+1+1+1+1
5=1+1+1+2
5=1+1+3
5=1+2+2
5=1+4
5=2+3
5=5
編寫一個程序,輸入任意一個不大於20的整數N,按以上格式輸出它的所有拆分。
輸入
只有一行,包含一個整數N(N不超過20)。
輸出
按樣例中格式,輸出對N的所有拆分。
樣例輸入
5
樣例輸出
5=1+1+1+1+1
5=1+1+1+2
5=1+1+3
5=1+2+2
5=1+4
5=2+3
5=5
坑。這個跟課件上不一樣。可以5=5。
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=200+2;
int s;
int a[maxn]={1};
void dfs(int sum,int n)
{
if(sum==0)
{
cout<<s<<"=";
for(int i=1;i<=n-2;i++)
cout<<a[i]<<"+";
cout<<a[n-1]<<endl;
}
else for(int i=a[n-1];i<=sum;i++)
{
//if(i<s)
//{
a[n]=i;
sum-=i;
dfs(sum,n+1);
sum+=i;
//}
}
}
int main()
{
scanf("%d",&s);
dfs(s,1);
return 0;
}