谢谢,请大家帮我看看这个函数有没有写正确!
这个函数的功能是:有一个数据表,表中有一列为数值型,并且按值从大到小顺序排列。现在的目的是从这个表中取出最少条数据,使这些数据的和相加等于一个指定的值。我写了以下函数,测试了下,没有问题,感觉又有点问题,但自己又找不到原因,只是感觉而已。贴出来,请大家看看。
说明:
1、我现在用的是内存表测试的
2、如果大家有更好的方法,麻烦贴出来
function TForm1.doit(s: Integer): Boolean;
var
Len: Integer;
SearchValue: Integer;
begin
Result := False;
SearchValue := s;
//先查找有没有等于 S 的数据
if JG.Locate('PRRS', SearchValue, []) then
begin
Memo1.Lines.Add('找到了==' + IntToStr(JG.FieldByName('prrs').AsInteger));
Result := True;
Exit;
end
else
begin
//先过滤小于S的数据
JG.Filtered := False;
JG.Filter := 'PRRS<' + IntToStr(SearchValue);
JG.Filtered := True;
//再按照最大到小顺序排序
JG.SortOn('PRRS', [mtcoDescending]);
JG.First;
Memo1.Lines.Add('==' + IntToStr(JG.FieldByName('prrs').AsInteger));
//再用S-第一个最大的值
SearchValue := SearchValue - JG.FieldByName('prrs').AsInteger;
if not JG.Eof then
begin
JG.Delete;
Result := doit(SearchValue);
end;
end;
end;