一个一维数组问题

haohhz 2007-11-21 03:56:49
A[0..n-1],B[0..m-1],n>m
意思找出数组A中m个小的数组给数组B
例如数组A[1,5,0,9,12,8,3,7),数组B[4]
求B[0,1,3,5]
条件:不能改变数组A的值,不用用其它数组.
...全文
79 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dulei115 2007-11-23
  • 打赏
  • 举报
回复
用插入排序
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, n, m: Integer;
A: array[0..9] of Integer;
B: array of Integer;
OutStr: String;
begin
A[0] := 2;
A[1] := 5;
A[2] := 3;
A[3] := 9;
A[4] := 6;
A[5] := 17;
A[6] := 23;
A[7] := 12;
A[8] := 0;
A[9] := 8;
OutStr := '';
m := 7;
SetLength(B, m);
for i := 0 to 9 do
begin
n := -1;
for j := 0 to Min(i - 1, m - 1) do
if A[i] > B[j] then
n := j
else
Break;
if n > m - 2 then
Continue;
for j := m - 1 downto n + 2 do
B[j] := B[j - 1];
B[n + 1] := A[i];
end;
for i := 0 to m - 1 do
OutStr := OutStr + ' ' + IntToStr(B[i]);
ShowMessage('B:'+ Trim(OutStr));
end;
haohhz 2007-11-23
  • 打赏
  • 举报
回复
为什么你这个B不会溢出呢?m+3时候也不会溢出.
  
for i := 0 to m + 3 do
OutStr := OutStr + ' ' + IntToStr(B[i]);

条件m<n
haohhz 2007-11-22
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var i,j,m:integer;
A :array[0..9] of integer;
B :array of integer;
OutStr:String;
begin
A[0]:=2;
A[1]:=5;
A[2]:=3;
A[3]:=9;
A[4]:=6;
A[5]:=17;
A[6]:=23;
A[7]:=12;
A[8]:=0;
A[9]:=8;
OutStr:='';
m:=7;
SetLength(B,m);
for j:=0 to m do
begin
if j=0 then
begin
B[j]:=A[0];
for i:=low(A) to high(A) do
begin
if (A[i]<B[j]) then B[j]:=A[i];
end;
end
else
begin
B[j]:=A[0];
for i:=low(A) to high(A) do
begin
if (A[i]>B[j]) then B[j]:=A[i];
end;
for i:=low(A) to high(A) do
begin
if (A[i]<B[j]) and (A[i]>B[j-1]) then B[j]:=A[i];
end;
end;
OutStr:=OutStr+' '+IntToStr(B[j]);
end;
ShowMessage('BÊý×éΪ'+OutStr);
end;

答案是出来了.谁能不能帮我优化一下..
GetError 2007-11-21
  • 打赏
  • 举报
回复
有意思,研究下
haohhz 2007-11-21
  • 打赏
  • 举报
回复
是的,帮忙
CloneCenter 2007-11-21
  • 打赏
  • 举报
回复
作业题?

16,748

社区成员

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

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