题目选自洛谷P2404

题目显然是用DFS来做,需要注意的是 结果是从小到大的,所以同一种答案不同位置都只算一种,所以在dfs的时候 我们每次从上一次的值开始搜索即可。

用数组p[9]的1-8下标位置代表放置的数字,因为最多就只能有8个1组成8嘛,

dfs(a,b,x) 用来表示第a个数,从b开始尝试,总和为x;

因为我们满足条件的时候 进入到了最新的a,实际上只保存了a-1个数

而又只有最后一个 即p[a-1]后面不加"+"输出,所以先输出下标 1—a-2;

题目描述

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

输入格式

输入:待拆分的自然数n。

输出格式

输出:若干数的加法式子。

输入输出样例

输入 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

说明/提示

用回溯做。。。。

n≤8

解题代码:

#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
int p[9],n;
void dfs(int a,int b,int x){//a为个数 b为开始的数 x为总和if(x==n){if(x==n)for(int i=1;i<=a-2;i++)cout<<p[i]<<"+";cout<<p[a-1]<<endl;;return;}if(x > n) return;for(int i=b;i<n;i++){p[a] = i;dfs(a+1,i,x+i);p[a] = 0;}
}
int main(){cin>>n;dfs(1,1,0);return 0;
}

深度优先搜索——自然数的拆分问题(洛谷 P2404)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 广度优先搜索——好奇怪的游戏(洛谷 P1747)

    题目选自洛谷P1747 简单的广搜模板题,4+8 = 12个方向进行bfs,目的地是(1,1) 每次查看队首是否到达,若到达(1,1) 则返回队首步长即可~ 需要注意的是,马走日和像走田的位置计算 i ...

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

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

  8. 洛谷 p2404 自然数拆分问题

    题目链接 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和.现在给你一个自然数n,要求你求出n的拆分成一些数字的和.每个拆分后的序列中的数字从小到大排序.然后你需要输出这些序列 ...

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

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

最新文章

  1. Mac Book 问题汇集
  2. EntityFramework4.5使用Expression类创建动态查询及动态查询导航属性
  3. centos 7 安装 npm 工具
  4. 嵌入式系统中看门狗概述。。。
  5. 15拆分成3个不同的自然数_一个简单的算法 - 将一个正整数拆分成指定几个正整数的组合...
  6. 用html做qq会员页面导航,untitledQQ会员页面导航3.html
  7. stm32单片机OLED显示图片 位图转换 Image2Lcd使用
  8. linux 查看文件开头几行、末尾几行、中间几行
  9. 第三方支付操作流程,有何优势,又存在哪些风险?
  10. excel制作折线图
  11. java gprs通信教程_S7-1200 GPRS通讯快速入门
  12. 时钟树综合CTS技术经验分享(高薪必备)
  13. Problem N: 设计飞机类Plane及其派生类
  14. requests实现登陆、点赞、批量点赞、取消点赞
  15. nginx快速配置参考
  16. JS: onfocus和onblur事件应用举例
  17. C++ 数据结构之栈stack (henu.hjy)
  18. 如何修改Microsoft edge浏览器主页?
  19. 什么是HTML? HTML基础
  20. Python 画二维和三维散点同心圆

热门文章

  1. 获取某一数据库的所有存储过程的名字
  2. 计算机硬件的五大单元
  3. bash资源监控_10个资源成为更好的Bash用户
  4. 不能断点调试python_为Python调试构建一个不间断的断点
  5. 什么是 devops_DevOps对您意味着什么?
  6. 如何使用Emacs Org模式和Reveal.js创建幻灯片
  7. Bootstrap 响应式设计
  8. java密码模块怎么做_密码模块设计
  9. 计算机网络第4版潘爱民_王道考研 计算机网络(2)学习笔记
  10. python图像分类代码_Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛