Для заданного массива, состоящего из 100 целых чисел, сначала вывести все числа, встречающиеся в нем несколько раз, а затем все числа, встречающиеся в нем только один раз.

Для заданного массива, состоящего из 100 целых чисел, сначала вывести все числа, встречающиеся в нем несколько раз, а затем все числа, встречающиеся в нем только один раз.
Гость
Ответ(ы) на вопрос:
Гость
Основная идея: во вспомогательном массиве p строим двусвязный список, элементы которого указывают на предка и потомка члена массива, имеющего такое же значение. Сначала выводим элементы, имеющие потомков, но не имеющие предков - это будут элементы, которые встречаются более одного раза, а их порядок следования совпадет с порядком следования в массиве. Затем выводим элементы, которые не имеют ни предков, ни потомков, т.е. встречаются в массиве один раз. const   n = 100; var   a: array[1..n] of integer;   p: array[1..n, 1..2] of integer;   {3 - индекс предыдущего элемента    4 - индекс следующего элемента}   i, j, e: integer; begin   Randomize;   for i := 1 to n do   begin     e := Random(51) - 25;     a[i] := e;     p[i, 1] := 0;     p[i, 2] := 0   end;   for i := 2 to n do   begin     j := i - 1;     e := a[i];     repeat       if e = a[j] then       begin         p[j, 1] := i;         p[i, 2] := j;         j := 0       end       else         j := j - 1     until j = 0   end;   for i := 1 to n do     if (p[i, 1] > 0) and (p[i, 2] = 0) then write(a[i]:4);   for i := 1 to n do     if (p[i, 1] = 0) and (p[i, 2] = 0) then write(a[i]:4);   writeln end. Тестовое решение:  -15 -21  -4  24  20  16   4  14   3   1  25  -9 -14  10  12 -13   9  -2 -16 -10 -25  21   2   8  15  -1  19  22  18 -23   6  -6 -17 -24  17 -20  -7 -12 -19  -3   7  23
Не нашли ответ?
Ответить на вопрос
Похожие вопросы