当前位置: 首页 > 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.lryc.cn/news/616332.html

相关文章:

  • LeetCode - 搜索插入位置 / 排序链表
  • 音视频学习(五十一):AAC编码器
  • 力扣(买卖股票的最佳时机I/II)
  • 面对信号在时频平面打结,VNCMD分割算法深度解密
  • windows的cmd命令【持续更新】
  • 数据库面试题集
  • ADB简介
  • 全面了解机器语言之kmeans
  • UE5多人MOBA+GAS 41、制作一个飞弹,添加准心索敌
  • 【走进Docker的世界】Docker环境搭建
  • Java集合框架、Collection体系的单列集合
  • OpenStack热迁移一直处于迁移中怎么办
  • Dify 从入门到精通(第 26/100 篇):Dify 的知识图谱集成
  • 基于django的宠物用品购物商城的设计与实现
  • Java基础编程核心案例:从逻辑到应用
  • Python 的列表 list 和元组 tuple 有啥本质区别?啥时候用谁更合适?
  • 嵌入式第二十四课!!linux应用软件编程与文件操作!!!
  • Java开源代码源码研究:我的成长之路与实战心得分享
  • actuary notes[2]
  • 产品经理入门 - 产品解决方案(需求分析、 功能优先级划分、功能价值、用户体验)
  • 智慧社区--4
  • Spring之【详解AOP】
  • Linux入门指南:26个基础命令全解析
  • 数字图像处理3
  • Docker-04:CGroups资源控制组
  • 【代码随想录day 15】 力扣 404. 左叶子之和
  • 部署一个免费开源的博客系统
  • OpenAI正式发布GPT-5:迈向AGI的关键一步
  • 【走进Docker的世界】深入理解Docker网络:从模式选择到实战配置
  • TF-IDF提取关键词(附实战案例)