日期:2014-05-20 浏览次数:20627 次
#include "stdio.h" #define MAX_NUM 100 #define DEQUAL(a,b) (fabs((a)-(b)) < 1e-6) //输入数组 double numbers[MAX_NUM]; //输入数组大小 int size; //第i个数起到末尾的和 double sum[MAX_NUM]; //第i位的数字是否选择上 int flag[MAX_NUM]; //数字的和 double total; //当前累加的和 double currentSum; //输入初始化操作 void Input() { } //根据flag数组输出选择上的数 void Output() { } void DFS(int depth) { if(depth == size || currentSum+sum[depth] < total)return; if(DEQUAL(currentSum+numbers[depth],total)) { flag[depth] = 1; Output(); flag[depth] = 0; } else if(currentSum+numbers[depth] < total) { currentSum += numbers[depth]; flag[depth] = 1; DFS(depth+1); flag[depth] = 0; currentSum -= numbers[depth]; } DFS(depth+1); } int main() { return 0; }
------解决方案--------------------
已知有如下几个数:10.80 23.30 18.00 32.00 15.50
已知和为50.80,要求输出所有可能相加因子的组合
本来就是一个用来作为算法入门的小例子,对于此题,可能性也很少
穷举法的小例子
------解决方案--------------------
可能用二叉树之类的能好一些,但是一时想不明白,记得看过类似的题目
------解决方案--------------------
看起来很麻烦啊 以前没写过。 关注中。