填充数组解决思路
填充数组
已知A数组的长度以及内容,怎么把中间空缺的数据填充进去。
举例
好像是用到个递归
------解决思路----------------------
找出源数组的最大值12,找出最小值1
设置新数据长度 (最大数-最小数) DIV 固定距离 + 1
for i:=最小 to 最大 do FARRAY2[i] := i*固定距离;
即可
------解决思路----------------------
1、建议使用动态数组FARRAY2。它可以自由加长。
2、确定数组间距。
3、由FARRAY1,创建FARRAY2。
------解决思路----------------------
------解决思路----------------------
对数组从头到尾做一次扫描并记录各个元素之差
求这些差的最大公约数,
以最大公约数为公差重新构造数组
已知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.
------解决思路----------------------
对数组从头到尾做一次扫描并记录各个元素之差
求这些差的最大公约数,
以最大公约数为公差重新构造数组