来博客园的第一篇博客
以后就放弃csdn了,就来这里记录自己的成长,就当成一个树洞吧,开心与难过,学习与生活,进步与成长,留下时间的痕迹!冲!冲!冲!
今天就写一篇dfs+回溯的题,去问大佬,大佬5分钟不到就把代码打出来了,感觉自己是个fw,哎不管了加油吧,希望自己有一天也可以变强!
自然数的拆分问题
题目描述
任何一个大于
输入格式
输入:待拆分的自然数
输出格式
输出:若干数的加法式子。
样例 #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
提示
数据保证,
dfs中需要两个参数,一个用来记录当前剩余要拆分的数,一个用于记录当前拆分的最大数,因为要按字典序输出,所以我们每次枚举下一个要拆分的数都从当前最大数开始枚举,比当前最大数小的数不能排在当前最大数的后面,记得回溯,需要恢复现场。
#include <iostream>
using namespace std;
const int N = 10;
int a[N], n, m;
inline void dfs(int n, int k)
{
if(n == 0)
{
if(m == 1) return ;
for(int i = 1; i < m; ++ i) cout << a[i] << "+" ;
cout << a[m] << endl;
}
for(int i = k; i <= n; ++i)
{
a[++ m] = i;
dfs(n - i, i);
m --;
}
}
int main()
{
cin >> n;
dfs(n, 1);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署