首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

呐喊高手帮忙,求一算法

2013-07-04 
呼喊高手帮忙,求一算法!access数据库中某字段值按升序依次为1,2,3,5,7,10,14,17,19,21共十个数字。请教如何

呼喊高手帮忙,求一算法!
access数据库中某字段值按升序依次为1,2,3,5,7,10,14,17,19,21共十个数字。请教如何用delphi代码实现将前后小于等于2的数字筛选出来,得到结果为(1)1,2,3,5,7;(2)17,19,21两组数据,并实现在word中的分行显示或者每个数组写入到一个word文件中。详细地说就是,如果从首个数字开始往后循环比较,满足小于等于2的数字筛选出来,应该是得到1,2,3;2,3;3,5;5,7;17,19;19,21,这样六个数组。我想把这些数组再做个关联应用,以上六个数组中存在相同数字的就视其为彼此关联,比如2,3与3,5有数字3是共有的,然后把这些数组一起合并组成一个新的数组,所以最后得到(1)1,2,3,5,7;(2)17,19,21两组数据。请高手帮忙!!最好以代码告之! 
[解决办法]
...

procedure NumGroup(ANumArr:array of Integer;ANumDiff:Integer;AStrings:TStrings);
var
  i,j,k,m,n:Integer;
  s:string;
begin
  AStrings.Clear;

  for i:=0 to High(ANumArr) do
    for j:=0 to High(ANumArr) do
      if ANumArr[j]>ANumArr[j+1] then
      begin
        k:=ANumArr[j];
        ANumArr[j]:=ANumArr[j+1];
        ANumArr[j+1]:=k;
      end;

  i:=0;
  while i<=High(ANumArr) do
  begin
    s:='';
    k:=ANumArr[i];
    for j:=i+1 to High(ANumArr) do
    begin
      m:=ANumArr[j];
      n:=ANumArr[j-1];
      if (m-n<=ANumDiff) and (m-k<=ANumDiff) then
      begin
        k:=m;
        if Pos(inttostr(n),s)=0 then s:=s+' '+inttostr(n);
        s:=s+' '+inttostr(m);
      end;
    end;

    inc(i,k);

    AStrings.Add(s);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  NumGroup([1,2,3,5,7,10,14,17,19,21],2,Memo1.Lines);
end;

热点排行