洛谷-P2404 自然数的拆分问题

洛谷-P2404 自然数的拆分问题

原题链接:https://www.luogu.com.cn/problem/P2404


题目描述

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。现在给你一个自然数n,要求你求出n的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。

输入格式

输入:待拆分的自然数n。

输出格式

输出:若干数的加法式子。

输入输出样例

输入 #1

7

输出 #1

1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+2+2
1+2+4
1+3+3
1+6
2+2+3
2+5
3+4

说明/提示

用回溯做。。。。

(nle 8)

C++代码

#include <iostream>
using namespace std;

int n, ans[10];

void dfs(int k, int s, int m) {
    if (k == n) {
        for (int i=0; i<m-1; ++i)
            cout << ans[i] << '+';
        cout << ans[m-1] << endl;
    } else if (k < n) {
        for (int i=s; i<n; ++i) {
            ans[m] = i;
            dfs(k+i, i, m+1);
        }
    }
}

int main() {
    cin >> n;
    dfs(0, 1, 0);
    return 0;
}
原文地址:https://www.cnblogs.com/yuzec/p/14163334.html