题记1|| 自然数的拆分
题目:
代码
#include <iostream>
using namespace std;
int sta[105];
int n, top = 0;
void dfs(int sum, int lst) {
if (sum > n) {
return ;
}
if (sum == n) {
for(int i = 1; i <= top; ++ i)
std::cout << sta[i] << " \n"[i == top];
return ;
}
for(int i = lst; i <= n - sum; ++ i)
sta[++ top] = i, dfs(sum + i, i), sta[top --] = 0;
return ;
}
int main(){
cin >> n;
dfs( 0, 1 );
return 0;
}
DFS过程中顺序的思考方式
将输出排序的方法
数组模拟栈的方法
输出方式的改进版如下
满足输出条件后的输出格式中
更精简的版本为:
cout << path[i] << "+/n"[i == top];
直接把"+/n"看作是一个明示的数组,第一个元素是加号,第二个元素是换行符。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述