【fjsd 1261】整數拆分

題目描述
一個正整數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;
}
發佈了150 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章