呼喊高手帮忙,求一算法!

lpq00812 2013-05-25 05:12:00
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两组数据。请高手帮忙!!最好以代码告之!
...全文
194 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpq00812 2013-05-29
  • 打赏
  • 举报
回复
谢谢wdonghai
wdonghai 2013-05-27
  • 打赏
  • 举报
回复
... 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;
lpq00812 2013-05-25
  • 打赏
  • 举报
回复
哪位大虾伸伸援手啊,小弟在此拜谢了!

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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