洛谷题单指南-搜索-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;
}

 

posted @   五月江城  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示