(回溯法)和为n的所有不增正整数和式分解算法
题目:
利用递归算法输出正整数和为n的所有不增的正整数和式。例如当n=5时,不增的和式如下:
5=5
5=4+1
5=3+2
5=3+1+1
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
解题思路:
形如这种求子集的问题都可以采用回溯法来解决,回溯法即一种加上剪枝判断的递归算法。
解决问题的关键词:不增
代码实现:
数组a用来保存分解出来的和数,即某个分解的集合
sum表示需要分解的数
k表示要分解的第k个和数
#include <iostream>
#include <stdio.h> using namespace std; #define N 100 void subSetOfSumN(int a[],int sum,int k){
for(int i=sum;i>=;i--){
if(i<=a[k-]){
a[k]=i;
if(i==sum){
printf("%d=%d",a[],a[]);
for(int p=;p<=k;p++)
printf("+%d",a[p]);
printf("\n");
}
else
subSetOfSumN(a,sum-i,k+);
}
}
} int main()
{
int n,a[N];
printf("Please input an integer n(1<=n<=20):");
scanf("%d",&n);
a[]=n;
printf("The result of nonDescend integer factorization is:\n");
subSetOfSumN(a,n,);
return ;
}
(回溯法)和为n的所有不增正整数和式分解算法的更多相关文章
- 回溯法解决N皇后问题(以四皇后为例)
以4皇后为例,其他的N皇后问题以此类推.所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子.在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平.竖直.以及45度 ...
- leetcode_401_Binary Watch_回溯法_java实现
题目: A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bot ...
- uva216 c++回溯法
因为题目要求最多8台电脑,所以可以枚举全排列,然后依次计算距离进行比较,枚举量8!=40320并不大,但这种方法不如回溯法好,当数据再大一些枚举就显得笨拙了,所以这个题我用回溯法做的,回溯有一个好处是 ...
- UVa 129 (回溯法) Krypton Factor
回溯法确实不是很好理解掌握的,学习紫书的代码细细体会. #include <cstdio> ]; int n, L, cnt; int dfs(int cur) { if(cnt++ == ...
- 实现n皇后问题(回溯法)
/*======================================== 功能:实现n皇后问题,这里实现4皇后问题 算法:回溯法 ============================= ...
- UVA - 524 Prime Ring Problem(dfs回溯法)
UVA - 524 Prime Ring Problem Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & % ...
- HDU 2553 n皇后问题(回溯法)
DFS Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description ...
- HDU 1016 Prime Ring Problem (回溯法)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 八皇后问题-回溯法(MATLAB)
原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang 1.问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能 ...
随机推荐
- 【Dijkstra】POJ1062-昂贵的聘礼
由于物品编号从1开始,我们假定0也是一个物品作为起点,它到其它物品的距离就是各个物品的原始价值.开始时,如果两种物品主人的等级限制M在规定范围以内,且j能用i替换,则将优惠价格视作从i到j的一条权值为 ...
- Vue-router浅识
一.router-link及router-view :用来做导航,通过传入to属性来指定链接 :用来做路由出口,路由匹配到的组件都会渲染在这里 const router = new VueRouter ...
- 4、Redis中对List类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
- hihocoder #1299 : 打折机票 线段树
#1299 : 打折机票 题目连接: http://hihocoder.com/problemset/problem/1299 Description 因为思念新宿的"小姐姐"们, ...
- Yii together
一对多,多对多的关联时最后的参数 together说明 如果为false,分开查多个语句 如果为true,强制生成一个语句 如果没有设置,分页页生成多个语句,不分页时生成一个语句 多对多时,查询时,中 ...
- redhat 各种版本下载
http://www.linuxfly.org/post/659/ http://pan.baidu.com/share/home?uk=3742764079&view=share#categ ...
- 选择排序是外面循环的array[i]与内循环的array[j]比较。冒泡排序是内循环的相邻两个值做比较修改
选择排序是外面循环的array[i]与内循环的array[j]比较.冒泡排序是内循环的相邻两个值做比较修改
- 为 UITextField 增加键盘偏移的模板化写法
.h代码 #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITextFieldDelega ...
- C#编程(一)
第一个简单的C#程序 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- DockManager如何停靠 z
DockManager默认只能停靠在窗体上,如果想停靠在其他控件上,我们发现并没有选项可以选,可能目前大部分解决方法是新建一个用户控件文件,再在用户控件里面单独设计模块. 除了这种方法还有没有其他的呢 ...