如题:  
 
         int  a  =  11;  
         int[]  x  =  new  int[]{2,7,5,3,4};  
 
         求  11  =  2  +  5  +  4;或者  11  =  7  +  4;

解决方案 »

  1.   

    这个算法并不是一个小算法啊,想要考虑所有的情况是很困难的
    比如你的数组有100个元素,那么需要考虑的情况个数是 C(100, 1) + C(100, 2) + ... + C(100, 100),就算加上条件判断也需要考虑非常多的情况。
    如果指定求两个或三个的和还有可能,不过循环的次数也是很多的
      

  2.   

    我说下思路:
    1.用int b=a-x[0]
    2。判断b是否为x中剩下的最小的值,如果有相等地就是一个组合。
    3。如果b是最小就无解。
    4。如果有小于b的x[i],,令a=b,递归调用,减去比b小值值x[i],并在剩下的x值中找个与b相等的就是个组合了。依次递归看看!
      

  3.   

    yinshuhai(因数还):    谢谢因数还呀。你这确实是一个思路。比我原来想的要好多了。我先试一下吧。
      

  4.   

    yinshuhai(因数还)的算法好象有点问题
    你怎么知道最小数肯定在最后组合中?
    比如7=3+4,x[]={2,3,4},那么7=2+?