Показать сообщение отдельно
  #3  
Старый 09.04.2009, 17:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А нельзя попроще?
Просто посчитать.
Нужны 2 массива одинкаовой размерности: массив с числами Ai и масив счетчиков.

Код:
const
  N = 100; // Длинна последовательности
var
  I, J : Integer;
  A, C : Array [1..N] Of Integer; // A - последовательность, C -счетчики
begin
  // Инициализация
  For I := 1 To N Do 
    Begin
      C[i] := 0; // Счетчик = 0 (еще не считали)
      A[i] := Random(1000) + 1; // Ai = [1..1000]
    End;

  // Считаем
  For I := 1 To N Do
    For J := 1 To N Do
       If A[i] = A[J] Then Inc(C[i]);

  // Здесь имеем кол-во вхождений Ai в последовательность.
  // Сложность алгоритма O = n^2
end;

В принципе если какой-то элемент входит несколько раз, то мы получим несколько повторений в массиве счетчиков. Тут вопрос в том, как выводить. можно исключить повторы. Можно, конечно, переработать алгоритм так, что он сначала составит список уникальных элементов, а потом уже будет считать, но, думаю, это будет излишне.
Ответить с цитированием