日期:2014-05-20  浏览次数:20597 次

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