【题目描述】

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。现在给你一个自然数n,要求你求出n的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。

【输入输出样例】

输入:7

输出:

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

【解题技巧】

最好运用回溯,依次递减,方法详见如下

【源代码法一】

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
using namespace std;
int a[10001]={1},n;
int dfs(int,int);
int dfs(int s,int t){
    int i;
    for(i=a[t-1];i<=s;i++){
        if(i<n)//当前数i要大于等于前一位数,且不超过n
        {
            a[t]=i;//保存当前拆分的数i
            s-=i;//s减去数i,s的值将继续拆分
            if(s==0)print(t);//当s=0时,拆分结束输出结果
                else dfs(s,t+1);//当s>0时,继续递归
            s+=i;//回溯:加上拆分的数,以便产生所有可能的拆分
        }
    }
    return ;
}

int print(int t){
    for(int i=1;i<=t-1;i++)//输出一种拆分方案
        cout<<a[i]<<"+";
    cout<<a[t]<<endl;
}
int main(){
    cin>>n;
    dfs(n,1);//将要拆分的数n传递给s
    return 0;
}

【源代码法2(暴力出奇迹,打表过样例)】

//打表的程序不作解释,仅供娱乐,请认真学习回溯

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
using namespace std;
int n;
int main(){
    cin>>n;
    if(n==1)printf("\n");
        else if(n==2)printf("1+1\n");
            else if(n==3)printf("1+1+1\n1+2\n");
                else if(n==4)printf("1+1+1+1\n1+1+2\n1+3\n2+2\n");
                    else if(n==5)printf("1+1+1+1+1\n1+1+1+2\n1+1+3\n1+2+2\n1+4\n2+3\n");
                        else if(n==6)printf("1+1+1+1+1+1\n1+1+1+1+2\n1+1+1+3\n1+1+2+2\n1+1+4\n1+2+3\n1+5\n2+2+2\n2+4\n3+3\n");
                            else if(n==7)printf("1+1+1+1+1+1+1\n1+1+1+1+1+2\n1+1+1+1+3\n1+1+1+2+2\n1+1+1+4\n1+1+2+3\n1+1+5\n1+2+2+2\n1+2+4\n1+3+3\n1+6\n2+2+3\n2+5\n3+4\n");
                                else printf("1+1+1+1+1+1+1+1\n1+1+1+1+1+1+2\n1+1+1+1+1+3\n1+1+1+1+2+2\n1+1+1+1+4\n1+1+1+2+3\n1+1+1+5\n1+1+2+2+2\n1+1+2+4\n1+1+3+3\n1+1+6\n1+2+2+3\n1+2+5\n1+3+4\n1+7\n2+2+2+2\n2+2+4\n2+3+3\n2+6\n3+5\n4+4\n");

return 0;
}
//♂_The_LYH_25_♂

P2404 自然数的拆分问题(洛谷)相关推荐

  1. 深度优先搜索——自然数的拆分问题(洛谷 P2404)

    题目选自洛谷P2404 题目显然是用DFS来做,需要注意的是 结果是从小到大的,所以同一种答案不同位置都只算一种,所以在dfs的时候 我们每次从上一次的值开始搜索即可. 用数组p[9]的1-8下标位置 ...

  2. 【寒假每日一题】洛谷 P2404 自然数的拆分问题

    题目链接:P2404 自然数的拆分问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 任何一个大于 1 的自然数 n,总可以拆分成若干个小于 n 的自然数之和.现在给你一 ...

  3. 洛谷P2404 自然数的拆分问题(回溯)

    洛谷P2404 自然数的拆分问题(回溯) #洛谷P2404 自然数的拆分问题(回溯)# 参考题解:https://www.luogu.com.cn/blog/CM0/solution-p2404 (第 ...

  4. 洛谷P2404 自然数的拆分问题

    搜索--P2404 自然数的拆分问题 题目背景 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和.现在给你一个自然数n,要求你求出n的拆分成一些数字的和.每个拆分后的序列中的数 ...

  5. 洛谷 P2404 自然数的拆分问题

    P2404 自然数的拆分问题 题目背景 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. 输入输出格式 输入 ...

  6. 洛谷 P2404 自然数的拆分问题C语言

    文章目录 前言 一.题目 二.解题思路 1.考察方向 2.深度优先搜索 3.解题 正解(升序+不去重) (去重+升序) 总结 前言 之前看了好多文章都说学习编程时写博客的重要,但一直没有尝试,今天在这 ...

  7. [洛谷]P2404 自然数的拆分问题

    一维的dfs搜索得记录搜索了多少次数,先用数组存数字,打印时在做处理, 用一个数组记录每一次拆分的数字是多少,同时用一个指针ct指向上一个拆分出来的数字. 若这个数字为0,就代表找到一种答案,打印处理 ...

  8. 【洛谷题解】P2404 自然数的拆分问题

    题目概况 题目概况: https://www.luogu.com.cn/problem/P2404 难度: 普及- 题目分析 简化题目: 题目很简单了 涉及知识点: 深度优先搜索DFS 解题思路: 通 ...

  9. 洛谷 P2404 自然数的拆分问题(搜索、保证顺序进行搜索)

    dfs 搜索即可,主要是搜索顺序:每一个搜索的数需要 >=上一个数,那么对于第一个数下标会是-1,越界,就提前在数组中存储一个1,即可. #include <iostream> #i ...

最新文章

  1. python设计模式(三):原型模式—快速实例化类的一种途径
  2. oracle多表查询
  3. MediaCodec_loop 崩溃
  4. mysql 单表多字段查询_单表多字段MySQL模糊查询的实现
  5. ci获取当前url链接的分组,控制器,方法
  6. 我们再来玩游戏(博弈)
  7. 小学五年级计算机二课活动记录,小学五年级主题班会的活动记录
  8. ThreadLocal和线程同步机制的对比
  9. Centos8安装X11-forwarding图形服务
  10. java switch finally_JavaSE
  11. 【Linux】02 用户和权限
  12. 管家婆单机版_安稳之托 祝福管家婆软件25周年
  13. [量化学院]基于协整的配对交易
  14. 手把手搭个vue的脚手架 - 2. 模板搭建
  15. 股票-每日复盘-5-24
  16. 软件设计交流系统-用户手册与帮助文档
  17. Beosin EOS-IDE 升级用户体验及常见问题答疑
  18. 石家庄铁道大学 2016 上半年软件工程课助教总结
  19. 笑话集原创笑话精品展第二十四期
  20. 企业微信公众号网页开发之引入高德地图API

热门文章

  1. deepin Picked up _JAVA_OPTIONS
  2. 搭建自己的技术博客系列(六)酷炫主题icarus常用配置整合版,快速搞定博客首页
  3. Altera FPGA 远程更新
  4. MT【145】不变的平面角
  5. HQL 报 return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 错误解决方案
  6. 灵魂拷问:学Python搞一个云服务器到底能干嘛?
  7. 打包aab_[Android][AAB]使用Google Play的AAB打包,出现页面渲染失败
  8. [29期] 一个乞丐的故事,什么叫职业人?
  9. 【排序】一次查找两元素
  10. HTTPS是什么幺蛾子