关于数组最大值记数的问题(200分)

  • 主题发起人 主题发起人 kia2004
  • 开始时间 开始时间
K

kia2004

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有这样的数组,格式如下:
-------------
a[0]=3
a[1]=4
a[2]=7
a[3]=6
a[4]=7
a[5]=3
a[6]=0
a[7]=0
----------------
a[0]=0
a[1]=4
a[2]=8
a[3]=8
a[4]=7
a[5]=3
a[6]=0
a[7]=0
---------------
现在需要对它们的最大值出现次数进行记数,例如第一部分最大值的记数结果是a[2] 1次,a[4] 1次, 第二部分最大值的记数结果是a[2] 1次,a[3] 1次 ,最终要求的结果应当是:a[2] 2次,a[3] 1次 ,a[4] 1次,即:
a'[0]=0
a'[1]=0
a'[2]=2
a'[3]=1
a'[4]=1
a'[5]=0
a'[6]=0
a'[7]=0
求取最大值和记数的算法.谢谢
 
搞定一半,呵呵.
//先求出最大数
k:=strtoint(arr[1]);
for i:=1 to 8do
begin
if k<strtoint(arr) then
begin
k:=strtoint(arr);
end;
end;
//比较最大数,找出并列最大数
for i:=1 to 8do
begin
if k=strtoint(arr) then
begin
stringgrid1.Cells[0,i]:='1';
memo2.Lines.Add(inttostr(i));
end;
end;
 
似乎遍历一次就够了,呵呵:)
Max:=-1;
//将Max初始化为比可能的最大值更小的数
Count:=0;
for i:=Low(arr) to High(arr)do
begin
n:=StrToInt(arr);
if n>Max then
//若遇到更大的数,更新Max的值并初始化Count
begin
Max:=n;
Count:=1;
end
else
if n=Max then
//遇到相同的数,增加Count计数
begin
Inc(Count);
end;
end;
 
function TForm1.GetMax(var ACount: Integer): Integer;
var
i: Integer;
begin
Result := a[Low(a)];
ACount := 1;
for i := Low(a) + 1 to High(a)do
begin
if a > Result then
begin
Result := a;
ACount := 1;
end
else
if a = Result then
Inc(ACount);
end;
end;
 
感谢,你们的方法很好。
 
后退
顶部