問題へのソリューション - デジタル分解

クリエイティブコモンズライセンス 著作権:帰属、紙ベースを作成するために他人を許可し、(同じライセンスで元のライセンス契約に基づいて用紙配布する必要がありますクリエイティブコモンズ

デジタル分解

説明は、
数Nを入力し、それは、少なくとも2つおよび数の和に分割され
、出力方式が辞書式を保証するために、できるだけ小さく最初のものと同じ二桁の数字の場合に可能な限り小さく、すなわち最初の数、
例えば、n個= 6
。1 5
2 4
。3. 3
。1. 1. 4
。1 3 2
2 2 2
。1. 1. 1. 3
。1 2 1 2
。1 1 1 1 2
。1 1 1 1 1 1

入力
数N
出力
複数行、各行の一つのアプローチは、各ライン後の各デジタル空間が有します

#include<bits/stdc++.h>
using namespace std;
int ans[100],n,lim;
void shuzidefenjie (int dep,int pre,int sum)
{
    if (dep==lim+1)
    {
        if (sum==n)
        {
            for (int i=1;i<=dep-1;i++)
                cout<<ans[i]<<" ";
            cout<<endl;
        }
        return;
    }
    for (int i=pre;i<=n;i++)
        if (sum+i<=n)
        {
            ans[dep]=i;
            shuzidefenjie(dep+1,i,sum+i);
        }
}
int main()
{
    cin>>n;
    for (lim=2;lim<=n;lim++)//这里是不可以在int一次的 (int lim;xx;xx)是错误的!!!!!!!!!! 
        shuzidefenjie(1,1,0);
    return 0;
}

おすすめ

転載: blog.csdn.net/Tangwan_jeff/article/details/95201045
おすすめ