P2404 自然数的拆分问题(洛谷)
【题目描述】
任何一个大于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 自然数的拆分问题(洛谷)相关推荐
- 深度优先搜索——自然数的拆分问题(洛谷 P2404)
题目选自洛谷P2404 题目显然是用DFS来做,需要注意的是 结果是从小到大的,所以同一种答案不同位置都只算一种,所以在dfs的时候 我们每次从上一次的值开始搜索即可. 用数组p[9]的1-8下标位置 ...
- 【寒假每日一题】洛谷 P2404 自然数的拆分问题
题目链接:P2404 自然数的拆分问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 任何一个大于 1 的自然数 n,总可以拆分成若干个小于 n 的自然数之和.现在给你一 ...
- 洛谷P2404 自然数的拆分问题(回溯)
洛谷P2404 自然数的拆分问题(回溯) #洛谷P2404 自然数的拆分问题(回溯)# 参考题解:https://www.luogu.com.cn/blog/CM0/solution-p2404 (第 ...
- 洛谷P2404 自然数的拆分问题
搜索--P2404 自然数的拆分问题 题目背景 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和.现在给你一个自然数n,要求你求出n的拆分成一些数字的和.每个拆分后的序列中的数 ...
- 洛谷 P2404 自然数的拆分问题
P2404 自然数的拆分问题 题目背景 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. 输入输出格式 输入 ...
- 洛谷 P2404 自然数的拆分问题C语言
文章目录 前言 一.题目 二.解题思路 1.考察方向 2.深度优先搜索 3.解题 正解(升序+不去重) (去重+升序) 总结 前言 之前看了好多文章都说学习编程时写博客的重要,但一直没有尝试,今天在这 ...
- [洛谷]P2404 自然数的拆分问题
一维的dfs搜索得记录搜索了多少次数,先用数组存数字,打印时在做处理, 用一个数组记录每一次拆分的数字是多少,同时用一个指针ct指向上一个拆分出来的数字. 若这个数字为0,就代表找到一种答案,打印处理 ...
- 【洛谷题解】P2404 自然数的拆分问题
题目概况 题目概况: https://www.luogu.com.cn/problem/P2404 难度: 普及- 题目分析 简化题目: 题目很简单了 涉及知识点: 深度优先搜索DFS 解题思路: 通 ...
- 洛谷 P2404 自然数的拆分问题(搜索、保证顺序进行搜索)
dfs 搜索即可,主要是搜索顺序:每一个搜索的数需要 >=上一个数,那么对于第一个数下标会是-1,越界,就提前在数组中存储一个1,即可. #include <iostream> #i ...
最新文章
- python设计模式(三):原型模式—快速实例化类的一种途径
- oracle多表查询
- MediaCodec_loop 崩溃
- mysql 单表多字段查询_单表多字段MySQL模糊查询的实现
- ci获取当前url链接的分组,控制器,方法
- 我们再来玩游戏(博弈)
- 小学五年级计算机二课活动记录,小学五年级主题班会的活动记录
- ThreadLocal和线程同步机制的对比
- Centos8安装X11-forwarding图形服务
- java switch finally_JavaSE
- 【Linux】02 用户和权限
- 管家婆单机版_安稳之托 祝福管家婆软件25周年
- [量化学院]基于协整的配对交易
- 手把手搭个vue的脚手架 - 2. 模板搭建
- 股票-每日复盘-5-24
- 软件设计交流系统-用户手册与帮助文档
- Beosin EOS-IDE 升级用户体验及常见问题答疑
- 石家庄铁道大学 2016 上半年软件工程课助教总结
- 笑话集原创笑话精品展第二十四期
- 企业微信公众号网页开发之引入高德地图API
热门文章
- deepin Picked up _JAVA_OPTIONS
- 搭建自己的技术博客系列(六)酷炫主题icarus常用配置整合版,快速搞定博客首页
- Altera FPGA 远程更新
- MT【145】不变的平面角
- HQL 报 return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 错误解决方案
- 灵魂拷问:学Python搞一个云服务器到底能干嘛?
- 打包aab_[Android][AAB]使用Google Play的AAB打包,出现页面渲染失败
- [29期] 一个乞丐的故事,什么叫职业人?
- 【排序】一次查找两元素
- HTTPS是什么幺蛾子