数字拆分--递归
2016-03-06 20:43
267 查看
将一个数字拆分为几个自然数相加的形式,列举出所有可能。
比如:
输入:5
输出:
1 + 1 + 1 + 1 + 1
1 + 1 + 1 + 2
1 + 1 + 3
1 + 2 + 2
1 + 4
2 + 3
5
#include<stdio.h>
#define N 1001
int rec
;
//start:当前拆分出的数
//pos:保存到rec数组的位置记录
//left_num:上一轮拆分后,还剩下的数
void print(int n){
int i;
for( i=0;i<n-1;i++){
printf("%d+",rec[i]);
}
printf("%d\n",rec[n-1]);
return;
}
void dfs(int start,int pos,int left_num){
if(left_num==0){
print(pos);
return;
}
int i;
for(i=start;i<=left_num;i++){
rec[pos]=i;
dfs(i,pos+1,left_num-i);
}
return;
}
int main(void){
int n;
scanf("%d",&n);
dfs(1,0,n);
return 0;
}
比如:
输入:5
输出:
1 + 1 + 1 + 1 + 1
1 + 1 + 1 + 2
1 + 1 + 3
1 + 2 + 2
1 + 4
2 + 3
5
#include<stdio.h>
#define N 1001
int rec
;
//start:当前拆分出的数
//pos:保存到rec数组的位置记录
//left_num:上一轮拆分后,还剩下的数
void print(int n){
int i;
for( i=0;i<n-1;i++){
printf("%d+",rec[i]);
}
printf("%d\n",rec[n-1]);
return;
}
void dfs(int start,int pos,int left_num){
if(left_num==0){
print(pos);
return;
}
int i;
for(i=start;i<=left_num;i++){
rec[pos]=i;
dfs(i,pos+1,left_num-i);
}
return;
}
int main(void){
int n;
scanf("%d",&n);
dfs(1,0,n);
return 0;
}
相关文章推荐
- undefined null ""
- java-swing-皮肤
- ehcart 多图 饼图和柱状图 echart多图加载问题
- Spring Profile基本使用
- Sha Function
- 千亿级别数字的人民币读法
- SoftwareTesting_Homework2
- 卷积神经网络(CNN)的简单实现(MNIST)
- linux时间片轮转小程序
- 矩形翻转
- HDU 4302 Holedox Eating(multiset)
- yii 用户管理 controller
- FZU 2195 思维
- Linux内核分析— —操作系统是如何工作的(20135213林涵锦)
- static 用法详细解释
- 常用未分类命令
- 使用Arduino读取噪声传感器分贝值
- 安卓手机恢复大师镜像存储的使用教程
- 详解Python中的下划线
- How to Develop blade and soul Skills