我通过特定的方式生成一些随机数,如何用DELPHI实现统计每个随机数的出现次数?
比如:
 生成的数是:123,567,214,890,940,123,890,123....
如何不通过数据库编程实现:123 ---> 2, 567-->1,214--->1,890--->2  ,谢谢DELPHI FANS

解决方案 »

  1.   

    var s:string;
        i,count:integer;
        sl:TStringList;
    begin
      sl:=TStringList.Create;  //产生100个十以内的随机数:
      Randomize;//初始化
      for i:=0 to 99 do sl.Append(inttostr(random(10)));  //将产生的随机数及其重复次数在memo显示:
      sl.Sorted:=True;
      s:='';
      count:=1;
      for i:=0 to 99 do begin
        if s<>sl.Strings[i] then begin
          if s<>'' then
            memo1.Lines.Append(s+'  出现  '+inttostr(count)+'  次');
          s:=sl.Strings[i];
          count:=1;
        end
        else inc(count);
      end;
      if s<>sl.Strings[99] then
        memo1.Lines.Append(sl.Strings[99]+'  出现  1  次')
      else
        memo1.Lines.Append(s+'  出现  '+inttostr(count)+'  次');  sl.Free;
    end;
    其实,通过数据库编程也不是什么难事呀,用 TClientDataSet 来实现就不需安装数据库了。
      

  2.   

    type
      PRec = ^TRec;
      TRec = record
        Number, Count: Integer;
        Next: PRec;
      end;function GetCount(const IntegerArr: array of Integer): PRec;
    var
      I: Integer;
      P, Tail: PRec;
    begin
      Result := nil;
      for I := Low(IntegerArr) to High(IntegerArr) do
      begin
        P := Result;
        while P <> nil do
          if P^.Number = IntegerArr[I] then
          begin
            Inc(P^.Count);
            Break
          end else
            P := P^.Next;    if P = nil then
        begin
          New(P);
          P^.Number := IntegerArr[I];
          P^.Count := 1;
          P^.Next := nil;
          if Result = nil then
            Result := P
          else
            Tail^.Next := P;
          Tail := P
        end;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      P, L, T: PRec;
      I: Integer;
    begin
      L := GetCount([123,567,214,890,940,123,890,123]);
      P := L;
      while P <> nil do
      begin
        ShowMessageFmt('%d ---> %d', [P^.Number, P^.Count]);
        P := P^.Next;
      end;  {释放}
      P := L;
      while P <> nil do
      begin
        T := P^.Next;
        Dispose(P);
        P := T;
      end;
    end;