组合问题

brisking 2007-06-12 01:27:57
QTY MONEY
1 3238
1 2008.5
1 1305
1 1455
1 1079
1 1528.5
1 1918.5
2 3231.5
2 4616
2 4017
2 2937


现有数据如上,想找出MONEY的组合等于6645的记录,怎么找呢?如果没有就返回NULL.
请各位大侠帮我找找,或者给个结果就行.
...全文
296 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hy_lihuan 2007-06-14
  • 打赏
  • 举报
回复
那就是算法问题了,两个循环应该可以解决吧;
第一个数加上后面的,小于你的目标数继续加;大于则第一个数加后面第二个数,这样循环就行了
lnmhfeng 2007-06-14
  • 打赏
  • 举报
回复
漂过
codeworker999 2007-06-14
  • 打赏
  • 举报
回复
那把重复的去掉
<script>
//ar数组
//rs组合的结果
//operate:
//0:-
//1:+
//2:*
//3:0
var numar=new Array(0,0,-1,-2,-3,-4,1,2,3,4,7,14);
function Generate_Permutations(ar,rs,operate)
{
var sum=new Array();
var flag="+";var tvar,tmp;
switch(operate)
{
case 0:flag="-";break;
case 1:flag="+";break;
case 2:flag="*";break;
case 3:flag="/";break;
default:{operate=1;flag="+";}
}
tvar = ar.join(",");tmp=tvar.replace(/,?0,?/g,"");;
tvar= tvar.length > tmp.length?tmp+",0":tmp;
ar=tvar.split(",");
if(!ar || ar.length<=1 )return sum;
ar.sort();
if((operate==0 && rs>=0)|| operate==3 )ar.reverse();
var result = new Array();
tvar = ar[ar.length-1] >=0 ? ar[ar.length-1]:"("+ar[ar.length-1]+")";
result.push(tvar);

for(var i=ar.length-2 ;i>=0;i--)
{
var count = result.length;
tvar = ar[i]>=0 ? ar[i]:"("+ar[i]+")";
for(var j=0;j<count;j++)
{
tmp=tvar+flag+result[j]
eval("var v="+tmp);
if(v==rs){(sum[tmp+"="+rs]++)||(sum[tmp+"="+rs]=1);}
result.push(tmp);
}
result.push(tvar);
}
return sum;
}
var ar=Generate_Permutations(numar,7,1);
for( x in ar)
document.write(x+"<br>");
</script>
dh20156 2007-06-14
  • 打赏
  • 举报
回复
楼上的代码不错,不过0重复是不是没有意义呢?
codeworker999 2007-06-14
  • 打赏
  • 举报
回复
数组 长度 大点就会 当掉
期待 高人
codeworker999 2007-06-13
  • 打赏
  • 举报
回复
<script>
//ar数组
//rs组合的结果
//flag加减乘除的+-*/
var numar=new Array(0,0,1,1,-1,1,2,3,4,5,7,0,-1);
function Generate_Permutations(ar,rs,flag)
{

var sum=new Array();
if(!ar || ar.length<=1 )return sum;
ar.sort();
var tvar;
var result = new Array();
tvar = ar[ar.length-1] >=0 ? ar[ar.length-1]:"("+ar[ar.length-1]+")";
result.push(tvar);

for(var i=ar.length-2 ;i>=0;i--)
{
var count = result.length;
tvar = ar[i]>=0 ? ar[i]:"("+ar[i]+")";
for(var j=0;j<count;j++)
{
var tmp=tvar+flag+result[j];
eval("var v="+tmp);
if(v==rs){(sum[tmp+"="+rs]++)||(sum[tmp+"="+rs]=1);}
result.push(tmp);
}
result.push(tvar);
}
return sum;
}
var ar=Generate_Permutations(numar,8,"+");
for( x in ar)
document.write(x+"<br>");
</script>
grearo 2007-06-13
  • 打赏
  • 举报
回复
QTYMONEY
13238
12008.5
11305
11455
11079
11528.5
11918.5
23231.5
24616
24017
22937


现有数据如上,想找出MONEY的组合等于6645的记录,怎么找呢?如果没有就返回NULL.
请各位大侠帮我找找,或者给个结果就行.

什么样的组合?加减?乘除?
懒得去死 2007-06-13
  • 打赏
  • 举报
回复
笨方法,写两个循环一直加。
Ischema 2007-06-13
  • 打赏
  • 举报
回复
mark up
brisking 2007-06-12
  • 打赏
  • 举报
回复
不能限个数,二个也行,三个也行,只要MONEY加起来等于6645即可.
我已经写了一个,用PB写的,但不知道对不对,因为结果是找不到.
mingxuan3000 2007-06-12
  • 打赏
  • 举报
回复
这是算法问题了,你的要求也不说清楚。是2个一组合,还是不限个数
dh20156 2007-06-12
  • 打赏
  • 举报
回复
踩一脚先!
brisking 2007-06-12
  • 打赏
  • 举报
回复
请问怎么用CGI遍历?
wasuka 2007-06-12
  • 打赏
  • 举报
回复
都取出来,用CGI遍历吧

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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