洛谷题单指南-搜索-P2404 自然数的拆分问题
原题链接:https://www.luogu.com.cn/problem/P2404
题意解读:将整数拆成若干数相加,按字母序输出,可以转换成从小到大往数组填数的问题,直到填的数之和等于n。
解题思路:
通过DFS,每次填一个数,填数时从1~n-1逐个填
注意两个条件不能继续DFS:
1、将填的数之和超过n
2、将填的数小于上一次填的数,因此填数时从上一个数~n-1逐个尝试即可
100分代码:
#include <bits/stdc++.h>
using namespace std;
int n;
int a[10];
void dfs(int k, int sum)
{
if(sum == n)
{
for(int i = 1; i < k; i++)
{
if(i > 1) cout << "+";
cout << a[i];
}
cout << endl;
}
for(int i = a[k - 1]; i < n; i++) //每次填的数大于等于上一个数
{
if(sum + i > n) break; //如果加起来超过n
a[k] = i;
dfs(k + 1, sum + i);
}
}
int main()
{
cin >> n;
a[0] = 1;
dfs(1, 0);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~