解决方案 »
- 帮忙看下这个代码的eve.target什么意思,谢啦
- 请教 JS 如何获取此页面的 来路url
- javascript 动态生成文本框,如何添加onkeyup
- 怎么测试http
- 关于动态控制按钮的有效无效的小问题
- 求个正则表达式
- 求javascript对html控件的操作代码,作为参考
- 保留小数位数后两位,如何写代码呢?如:var tt=2.23423423423423 我只想要2.23如何实现。
- 怎样在网页上安装程序,就像3721、flash插件一样,安装时询问是否信任,确定后即可安装到客户端,这样可以实现远程消息通告么,可否给个
- 请教,jQuery中的一个正则表达式
- 大家来说说那个UI比较好呢,我现在用的是easy ui
- Eclipse 搭建Node.js环境问题
var original_array = [42.6,140.4,60.2,46.8,11.2,106.6,57,75,47.6,90.2,115.2];
var result = [];
var condition = 600;main(original_array);console.log(result);
console.log(result[0]);function main(array){
for(var i =0; i < array.length; i++){
process(0,array.slice(i,array.length),[]);
}
result.sort(function(a,b){
return a.Total - b.Total;
});
}function process(num,array1,array2)
{
if(num >= condition){
result.push({Total:num,Array:array2});
if(array1.length > 0){
var value = array2[array2.length - 1];
num -= value;
process(num,array1,array2.slice(0,array2.length - 1));
}
}else{
if(array1.length > 0){
var value = array1[0];
num += value;
array2.push(value);
process(num,array1.slice(1,array1.length),array2);
}
}
}
document.write(result); 输出的是 [object object];
alert(result[0]) 或 alert(result[0].toString()) ; 输出的也是[object object];
document.write(result[i].Total +':'+ result[i].Array + '<br>');
609.8000000000001:60.2,46.8,11.2,106.6,57,75,47.6,90.2,115.2
635.0000000000001:140.4,60.2,46.8,11.2,106.6,57,75,47.6,90.2
660.0000000000001:140.4,60.2,46.8,11.2,106.6,57,75,47.6,115.2
677.6:42.6,140.4,60.2,46.8,11.2,106.6,57,75,47.6,90.2
702.6:42.6,140.4,60.2,46.8,11.2,106.6,57,75,47.6,115.2
function fun(arr,top) {
var temp = [arr];
if (arr.length < 2)return temp;
arr.sort(function (a, b) {return a < b});//先倒序排列
while (arr[0] >= top) {
arr[0] == top ? temp.push([arr.shift()]) : temp = [[arr.shift()]]; //筛选出所有top及超出top的元素
}
var l = arr.length;//总长度
function arr_sum(t, n) {
for (var a = n + 1; a < l; a++) {
t.push(arr[a]);//合并下一个数组
if (eval(t.join("+")) >= top) {
temp.push([].concat(t));
t.pop();
arr_sum(t,a);
break;
}
}
}
for (var k = 0; k < l; k++)arr_sum([arr[k]], k);//循环组合判断
temp.sort(function (a, b) {
return eval(a.join("+")) > eval(b.join("+"));
});//重新排序下,前面几个才可能符合
var Arr = [temp[0]];//默认第一个
for (k = 1; k < temp.length; k++) {
if (eval(temp[k].join("+")) == top)Arr.push(temp[k]);//试着判断其他
}
return Arr;
}
console.log(fun([42.6,140.4,60.2,46.8,11.2,106.6,57,75,47.6,90.2,115.2],600));
console.log(fun([42,100,46,101,106.6,87,13,1,9,90,20,80,115.2],100));
//按理说应该可能会返回好几个符合条件的。
</script>
function fun(arr,top) {
var temp = [arr];
if (arr.length < 2)return temp;
arr.sort(function (a, b) {return a < b});//先倒序排列
while (arr[0] >= top) {
var f = arr.shift();
arr[0] == top ? temp.push([f,f]) : (temp = [[f,f]]); //筛选出所有top及超出top的元素
}
var l = arr.length;//总长度
function arr_sum(t, n) {
for (var a = n + 1; a < l; a++) {
t.push(arr[a]);//合并下一个数组
t[0]+=arr[a];//求总和
if (t[0] >= top) {
temp.push([].concat(t));
t.pop();
arr_sum(t,a);
break;
}
}
}
for (var k = 0; k < l; k++)arr_sum([0,arr[k]], k);//循环组合判断
temp.sort(function (a, b) {
return a[0]>b[0];
});//重新排序下,前面几个才可能符合
console.log(temp);
var Arr = [temp[0].slice(1)];//默认第一个
for (k = 1; k < temp.length; k++) {
if (temp[k][0] == top)Arr.push(temp[k].slice(1));//试着判断其他
}
return Arr;
}
console.log(fun([42.6,140.4,60.2,46.8,11.2,106.6,57,75,47.6,90.2,115.2],600));
console.log(fun([42,100,46,101,106.6,87,13,1,9,90,20,80,115.2],100));
//按理说应该可能会返回好几个符合条件的。
</script>