算法:寻找数组内几个数相加等于一个值

ilvoehua 2008-07-29 11:51:34
算法:
用JAVA写一个函数。功能如下:
任意给定一组数,例如{12,60,-8,99,15,35,17,18},
找出任意数相加之后的结果为35(任意设定)的情况,
例如:12+8+15; 35; 17+18
...全文
3026 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sailing19 2008-09-16
  • 打赏
  • 举报
回复
和这个题类似的一个算法小弟上课的时候讲过,不同的是课上那个算法只算出有多少种不同的组合方法,而不打印出解决方案。原本以为很快就能解决这个问题,结果做了一下午没有搞定。我把这个算法贴出来,给大家一点提示,希望楼下的继续。
动态编程法(dynamic programing)
简单说,动态编程就是在方法实现里面调用自己本身来实现循环。大问题就是这样通过不断调用方法来逐步化解的。
假设需要相加出的结果为a, 那么,可能的组合方法等于
除去数组里第一个数外,其他可能组合的数量 加上
数组里所有数组合成a-d的可能的数量,d为数组中的第一个数
然后就是循环结束条件:
1. a = 0, 找到了解决方案,counter++;
2. a < 0, 没有找到解决方案

public static int count(int amount, int[] array){
return count(amount,0, array);
}
public static int count(int amount, int denomPointer, int[] array){
if (amount == 0){
return 1;
}else if ((amount < 0) || (denomPointer >= array.length)){
return 0;
}else{
return count(amount - array[denomPointer],denomPointer, array) +
count(amount, ++denomPointer, array);
}
}
Coolfatman 2008-09-11
  • 打赏
  • 举报
回复
全部组合算一遍,在把结果取出来。
ilvoehua 2008-09-11
  • 打赏
  • 举报
回复
无语了,怎么就没一个来做一下呢?
ariso 2008-09-10
  • 打赏
  • 举报
回复
这个不是一个简单的问题
cool_hnu 2008-09-08
  • 打赏
  • 举报
回复
还没答案啊!失望中。。。。。。。。
throad0 2008-09-05
  • 打赏
  • 举报
回复
还没答案啊!失望中。。。。。。。。
throad0 2008-08-27
  • 打赏
  • 举报
回复
期待答案中.......
volcanofifa 2008-08-27
  • 打赏
  • 举报
回复
貌似遺傳算法?
forevertraveller 2008-08-26
  • 打赏
  • 举报
回复
divide and conquer 分治法
loveinyou 2008-07-29
  • 打赏
  • 举报
回复
有点难度

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧