递归——自然数的拆分问题

2044: 【回溯】自然数的拆分问题
时间限制: 1 Sec 内存限制: 128 MB
[提交] [状态]
题目描述
输入自然数N,拆分成由若干数相加的形式,参与加法运算的数可以重复。
输入
待拆分的自然数N。
输出
若干数的加法式子。
样例输入 Copy
7
样例输出 Copy
1+6
1+1+5
1+1+1+4
1+1+1+1+3
1+1+1+1+1+2
1+1+1+1+1+1+1
1+1+1+2+2
1+1+2+3
1+2+4
1+2+2+2
1+3+3
2+5
2+2+3
3+4

#include <iostream>
#include <cstdio>
#include <queue>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <map>
using namespace std;
#define INF 0x3f3f3f3f
const int M = 100005;
int n;
int a[10000];
void print(int n){
    for(int i=1; i<=n; i++){
        cout << a[i];
        if(i!=n) cout << "+";
    }
    cout << endl;
}
void dfs(int n,int ans){
    for(int i=1; i<=n/2; i++){ //n/2 保证输出从1开头到n/2开头
        if(i>=a[ans-1]){
            a[ans] = i;
            a[ans+1] = n-i;
            print(ans+1); //输出ans+1个
            dfs(n-i,ans+1);
        }
    }
}
int main()
{
    cin >> n;
    a[0] = 0;
    dfs(n,1);
    return 0;
}


发布了62 篇原创文章 · 获赞 0 · 访问量 1762

猜你喜欢

转载自blog.csdn.net/jhckii/article/details/104254500