自然数的拆分问题

简介: 自然数的拆分问题

题目描述

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

输入格式

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

输出格式

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

输入输出样例

输入

7


输出

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

说明/提示

数据保证,2≤n≤8。

#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
void dfs(int n, int start, vector<int>& path) {
    if (n == 0) {
        for (int i = 0; i < path.size(); i++) {
            cout << path[i];
            if (i != path.size() - 1) {
                cout << "+";
            }
        }
        cout << endl;
        return ;
    }
    for (int i = start; i <= n; ++i) {
        path.push_back(i);
        dfs(n - i, i, path);
        path.pop_back();
    }
}
int main() {
    int n;
    cin >> n;
    vector<int> path;
    dfs(n, 1, path);
    return 0;
}

这个代码运行后会输出n的数值,与题目要求不符,改进后代码如下:

#include<iostream>
using namespace std;
class Solution {
public:
    int n, a[10];
    void dfs(int h, int c, int q) {
        if (h == n) {
            for (int i = 1; i <= c - 2; i++) {
                cout << a[i] << '+';
            }
            cout << a[c - 1] << endl;
            return;
        }
        if (h > n) return;
        for (int i = q; i <= n - 1; i++) {
            a[c] = i;
            dfs(h + i, c + 1, i);
            a[c] = 0;
        }
    }
};
int main() {
    Solution solution;
    cin >> solution.n;
    solution.dfs(0, 1, 1);
    return 0;
}

目录
相关文章
|
传感器
单片机的输入输出端口
单片机的输入输出端口
1922 2
|
存储 Kubernetes 算法
开源免费的对象存储Minio
Minio是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合存储大容量、非结构化的数据。例如,图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小的,从几KB到5TB不等。
2051 0
|
10月前
|
Dart
Flutter 中使用 ICON
Flutter 中使用 ICON
421 5
Flutter 中使用 ICON
|
SQL 移动开发 前端开发
基于Jeecg-boot前后端分离的flowable流程管理平台主页调整
基于Jeecg-boot前后端分离的flowable流程管理平台主页调整
165 0
|
11月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
324 2
|
11月前
|
中间件 编译器 开发工具
如何用易语言进行跨平台的软件开发
如何用易语言进行跨平台的软件开发
137 3
|
存储 数据管理 数据挖掘
打破数据孤岛:揭示企业信息的隐形枷锁
企业需要采取措施打破数据孤岛,实现数据的自由流动和最大化利用。首先,企业需要建立统一的数据存储和访问标准,以简化数据管理和分析的过程。其次,企业需要提高员工的数据素养,使他们能够理解和利用数据来支持决策。最后,企业需要建立有效的数据管理和合规策略,以确保数据的完整性和安全性。
打破数据孤岛:揭示企业信息的隐形枷锁
|
存储 Java
使用OutputStreamWriter写入数据
使用OutputStreamWriter写入数据
|
人工智能
AI生图美学在淘宝的实践应用(2)
AI生图美学在淘宝的实践应用
478 8
【二分查找】左侧边界、右侧边界、查找值
【二分查找】左侧边界、右侧边界、查找值