当前位置: 代码迷 >> J2SE >> 求高人帮忙解决算法解决方法
  详细解决方案

求高人帮忙解决算法解决方法

热度:100   发布时间:2016-04-24 02:08:06.0
求高人帮忙解决算法
已知有如下几个数:10.80 23.30 18.00 32.00 15.50

已知和为50.80

要求输出所有可能相加因子的组合

例如此例应输出 18.00 32.00 10.80

ps:相加因子数目不限

------解决方案--------------------
穷举法。。。
------解决方案--------------------
C/C++ code
#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,要求输出所有可能相加因子的组合
本来就是一个用来作为算法入门的小例子,对于此题,可能性也很少
穷举法的小例子
------解决方案--------------------
可能用二叉树之类的能好一些,但是一时想不明白,记得看过类似的题目
------解决方案--------------------
看起来很麻烦啊 以前没写过。 关注中。
  相关解决方案