問題点O:デジタル分解

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

問題O:デジタル分解
時間制限:. 1秒メモリ制限:128メガバイト
登録:126解決:76
[登録] [状態] [ウェブボード]
説明
番号Nを入力し、それは、少なくとも2人のデジタル和に分割され
て出力を確保するためにスキーム辞書式順序、すなわち、1種で、できるだけ小さい第一の数と小さい第二の場合と同じ桁数
例6 = N-
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<iostream>
#include<cstdio>
using namespace std;
int n, p[11]={1}, cnt=1, m;
void dfs(int dep,int cnt,int ans){
    if(dep==m+1){
        if(ans==n){
            for(int i=1;i<=dep-1; i++)
            cout<<p[i]<<" ";
            cout<<endl;
        }
        return;
    }
    for(int i=cnt;i<=n;i++){
        if(ans+i<=n){
            p[dep]=i;
            dfs(dep+1,i,ans+i);
        }
    }
}
int main(){
    cin>>n;
    for(m=2;m<=n;m++)
    dfs(1,1,0);
    return 0;
}

おすすめ

転載: blog.csdn.net/ebirth/article/details/95229510