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

C++题解(37) 信息学奥赛一本通1318:【例5.3】自然数的拆分

时间限制: 1000 ms         内存限制: 65536 KB
提交数:48820    通过数: 28647

【题目描述】

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。

当n=7共14种拆分方法:

7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
total=14

【输入】

输入n。

【输出】

按字典序输出具体的方案。

【输入样例】

7

【输出样例】

7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4

参考答案

#include<bits/stdc++.h>
using namespace std;
int n, a[10001], ai; void show()
{cout << n << "=";cout << a[1];for(int i = 2; i <= ai; ++i)cout << '+' << a[i];cout << endl;
}void dfs(int m, int st)
{for(int i = st; i <= m && i < n; ++i) {a[++ai] = i;if(m - i == 0) show();else if(m - i > 0)dfs(m - i, i);ai--;}
}int main()
{cin >> n;dfs(n, 1);return 0;
}

http://www.lryc.cn/news/588810.html

相关文章:

  • 测试tcpdump,分析tcp协议
  • 服务器端安全检测与防御技术概述
  • 力扣25.7.15每日一题——有效单词
  • 微信小程序入门实例_____从零开始 开发一个每天记账的微信小程序
  • 深入理解C++11 std::iota:从原理到实践
  • 深度学习·目标检测和语义分割基础
  • 【PTA数据结构 | C语言版】根据前序序列重构二叉树
  • Docker安装升级redis,并设置持久化
  • 【Java篇】IntelliJ IDEA 安装与基础配置指南
  • 零基础入门物联网-远程门禁开关:代码调试
  • 深度学习 Pytorch图像分类步骤
  • vscode输出中文乱码问题的解决
  • [BrowserOS] Nxtscape浏览器核心 | 浏览器状态管理 | 浏览器交互层
  • TiD2025 | openKylin基础设施平台创新实践分享,构筑开源质量根基
  • 内存栅栏(std::atomic_thread_fence)
  • Redis学习系列之——Redis Stack 拓展功能
  • 深度学习中的激活函数:从原理到 PyTorch 实战
  • C++11:constexpr 编译期性质
  • 【Python3-Django】快速掌握DRF:ModelViewSet实战指南
  • AJAX 入门到精通
  • JavaScript中关于环境对象的拓展
  • GaussDB 数据库字符编码与兼容模式
  • 操作系统笔记:进程调度(Process Scheduling)
  • 纸板加工制造学习1
  • Listener(监听器)
  • 【监控实战】Grafana自动登录如何实现
  • 【prometheus+Grafana篇】基于Prometheus+Grafana实现SQLserver数据库的监控与可视化
  • 半导体制造流程深度解析:外观缺陷检测的AI化路径与实践
  • 批量制作Word:如何根据表格数据的内容批量制作word,根据Excel的数据批量制作word文档的步骤和注意事项
  • docker安装prometheus和Grafana