当前位置: 首页 > news >正文

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

题目描述

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

输入格式

输入:待拆分的自然数 nnn

输出格式

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

输入输出样例 #1

输入 #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

说明/提示

数据保证,2≤n≤82\leq n\le 82n8

solution

如果函数 f 将 n 拆解成最大加数不超过 m 的形式,则函数 f 可以写成递归形式即 f(n, m) = f(n, m-1) + f(n-m,m)
即 n 拆解成 不大于 m 的数相加的情况分为两种

  • 没有 等于 m 的,f(n, m-1)
  • 有等于 m 的 f(n-m,m)

代码

#include <sstream>
#include "iostream"
#include "math.h"
#include "algorithm"
#include "string.h"
#include "unordered_set"
#include "deque"
#include "stack"
#include "queue"
#include "vector"
#include "unordered_map"using namespace std;vector<string> res;void f(int n, int k, string s) { // 分解 n // 最大分解不超过 k//if (k > n) k = n;if (k == 1) {string ss;for (int i = 0; i < n; i++) ss += "1+";res.push_back(ss + s);return;}if (n == 1) {res.push_back("1+" + s);return;}for (int t = 1; t <= k; t++) {if (n - t > 0)f(n - t, t, to_string(t) + "+" + s);}if (n <= k) res.push_back(to_string(n) + "+" + s);
}int main() {int n;cin >> n;f(n, n, "");sort(res.begin(), res.end());for (int i = 0; i < res.size() - 1; i++) {cout << res[i].substr(0, res[i].size() - 1) << endl;}return 0;
}

结果

在这里插入图片描述

http://www.dtcms.com/a/324578.html

相关文章:

  • 3.3keep-alive
  • Windows11 [Close Folder Shortcut]
  • vue2升级vue3:单文件组件概述 及常用api
  • Android Intent 解析
  • 【Linux】通俗易懂讲解-正则表达式
  • 从Redisson源码角度深入理解Redis分布式锁的正确实现
  • JetPack系列教程(三):Lifecycle——给Activity和Fragment装个“生命探测仪“
  • redis主从模型与对象模型
  • Beelzebub靶机练习
  • 代码随想录算法训练营第五十九天|图论part9
  • 下一代防火墙总结
  • 【软考中级网络工程师】知识点之 PPP 协议:网络通信的基石
  • Stlink识别不到-安装驱动
  • Hutool-RedisDS:简化Redis操作的Java工具类
  • 【Python 小脚本·大用途 · 第 1 篇】
  • 在VMware中安装统信UOS桌面专业版
  • Python 的浅拷贝 vs 深拷贝(含嵌套可变对象示例与踩坑场景)
  • 基础算法(11)——栈
  • 【3D图像技术分析与实现】CityGaussianV2 工作解析
  • log4cpp、log4cplus 与 log4cxx 三大 C++ 日志框架
  • 机器学习数学基础:46.Mann-Kendall 序贯检验(Sequential MK Test)
  • Java集合框架、Collection体系的单列集合
  • 有限元方法中的数值技术:追赶法求解三对角方程
  • 【鸿蒙/OpenHarmony/NDK】什么是NDK? 为啥要用NDK?
  • PCB知识07 地层与电源层
  • LLIC:基于自适应权重大感受野图像变换编码的学习图像压缩
  • 每日一题:使用栈实现逆波兰表达式求值
  • Redis高级
  • AAAI 2025丨具身智能+多模态感知如何精准锁定目标
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘ray’问题