填充数组解决思路

填充数组
已知A数组的长度以及内容,怎么把中间空缺的数据填充进去。
举例

FARRAY1:=(1,2,4,5,7,8,9,12)
怎么样转换成填充成
FARRAY2:=(1,2,3,4,5,6,7,8,9,10,11,12)
FARRAY2[N]与FARRAY2[N+1]数据之间是有个固定间距


好像是用到个递归
------解决思路----------------------
找出源数组的最大值12,找出最小值1
设置新数据长度 (最大数-最小数) DIV 固定距离 + 1
for i:=最小 to 最大 do FARRAY2[i] := i*固定距离;
即可
------解决思路----------------------
1、建议使用动态数组FARRAY2。它可以自由加长。
2、确定数组间距。
3、由FARRAY1,创建FARRAY2。
------解决思路----------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const n=7;
var FARRAY1:array[0..n] of integer;
    FARRAY2:array of integer;
    First,Last,K,L,i:integer;
    S:string;
begin
  FARRAY1[0]:=1;
  FARRAY1[1]:=2;
  FARRAY1[2]:=4;
  FARRAY1[3]:=5;
  FARRAY1[4]:=6;
  FARRAY1[5]:=7;
  FARRAY1[6]:=8;
  FARRAY1[7]:=12;
// 确定间距
  K:=100;
  For i:=7 downto 0 do
  if i>0 then
  begin
    if (FARRAY1[i]-FARRAY1[i-1])<k then
      if (FARRAY1[i]-FARRAY1[i-1])>0 then
        K:=FARRAY1[i]-FARRAY1[i-1];
  end;
// 确定动态数组长度
  First:=FARRAY1[0];
  Last:=FARRAY1[n];
  L:=1;
  repeat
    First:=First+K;
    L:=L+1;
  until First>=Last;
// 创建动态数组
  SetLength (FARRAY2, 1);       // 首位值
  FARRAY2[0]:=FARRAY1[0];
  for i:=1 to L-2 do            // 中间值
  begin
    SetLength (FARRAY2, I+1);
    FARRAY2[I]:=FARRAY2[I-1]+K;
  end;
  SetLength (FARRAY2, L);       // 尾值
  FARRAY2[L-1]:=FARRAY1[n];
// 显示  FARRAY1 值
  S:='';
  for i:=0 to n do
    if i<n
      then S:=S+IntToStr(FARRAY1[i])+','
      else S:=S+IntToStr(FARRAY1[i]);
  Edit1.Text:=S;
// 显示  FARRAY2 值
  S:='';
  for i:=0 to L-1 do
    if i<L-1
      then S:=S+IntToStr(FARRAY2[i])+','
      else S:=S+IntToStr(FARRAY2[i]);
  Edit2.Text:=S;
end;

end.

------解决思路----------------------
对数组从头到尾做一次扫描并记录各个元素之差
求这些差的最大公约数,
以最大公约数为公差重新构造数组