在工作中遇见的难题,可以简化为如下的数学模型:已知数组A和B,长度为n,数据类型为double。从A的n个元素中任取m个数(1<=m<=n),按照相同的下标从B中相应取出m个数,P=(A[i1]+A[i2]...+A[im])/(B[i1]+B[i2]+...+B[im])。如何遍历所有的m计算出所有的P,从而得到P的最大值和最小值。当从A、B中取m个数时,要遍历取m个数所有的组合(而不是排列),即i1、i2、...、im不一定为从小到大连续的整数,仅表示从A中和从B中取数时,元素的下表要对应。
解决方案 »
- if条件判断和ASCII码的问题?
- 现在TreeView1中只能显示出根目录以下的目录,要如何能连根目录一起显示出来呢?
- 怎样得到windows的一些系统目录,比如'我的文档'我的文档里面的'我的音乐','我的视频'
- 一个老问题了,数据查询,多多帮忙啊
- 想找到一个捷径方法来设置组件!
- 怎样判断多个程序的运行(是否用户在用这个程序),并且记下每个程序运行的时间(时间段,如A程序运行了1个小时)
- 用什么方法可以检测内存泄漏呢?
- 两个变量计算再比较,用sql和delphi写要怎么样?
- delphi打印小票 要用到什么技术?
- 对大侠来说是小问题,不过还望莫抬手Skip过去(Thanks)!
- 也来谈谈对“精通”的理解
- 请问一个报表问题,十分着急,客户在等待答复~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二次来Delphi区
受过别人的支持,
现在来支持别人一下var
top:integer = 0;
stack:array[0..MAX_SIZE] of integer;function comb( index:integer; a:array of integer ):integer;
begin
if( top == m )
begin
DispStack;
result:=1;
end
else
begin
for( i:=index; i < n; i++ )
begin
stack[top]:= a[i];
inc(top);
result:= result+comb( i+1, a );
dec(top);
end;
end;
end;
top:integer = 0;
stack:array[0..MAX_SIZE] of integer;procedure DispStack;
var
i:integer;
begin
for i:=0 to top do
begin
write(stack[i],',');
end;
writeln;
end;function comb( index:integer; a:array of integer ):integer;
begin
if( top == m )
begin
DispStack;
result:=1;
end
else
begin
for( i:=index; i < n; i++ )
begin
stack[top]:= a[i];
inc(top);
result:= result+comb( i+1, a );
dec(top);
end;
end;
end;