Удалить повторяющиеся элементы из массива
Из одномерного массива удалить все повторяющиеся элементы (дубликаты) так, чтобы каждое значение встречалось в массиве только один раз.
Проще всего решить данную задачу, используя второй массив, в котором и будут содержаться уникальные элементы.
Пусть исходный массив присвоен переменной a. В нем N - элементов. Второй массив обозначим b, количество элементов - M (сколько их мы не знаем, поэтому это переменная, а не константа).
Запишем первый элемент массива a в массив b. Переменной M присвоим 1.
Начинаем в цикле перебирать массив a, начиная со второго элемента и до конца (до N). Заранее предполагаем, что очередной элемент не встречается в массиве b, то есть он не является повторяющимся. Отражаем это предположение в присвоении булевой переменной f значение True
.
Во вложенном цикле перебираем все элементы массива b (до М). Если текущий элемент массива a совпадает по значению с каким-либо элементом массива b, то устанавливаем f в значение False
. Это значит, что нам встретился дубликат, который должен быть удален.
После всех итераций внутреннего цикла проверяем значение f. Если оно осталось True
, то элемент уникальный, его следует записать в массив b. Перед этим увеличиваем значение M на единицу (ведь количество элементов увеличилось).
const
N = 10;
var
a,b: array[1..N] of integer;
i,j,M: byte;
f: boolean;
begin
randomize;
for i:=1 to N do begin
a[i] := random(10);
write(a[i]:2);
end;
writeln;
b[1] := a[1];
M := 1;
for i:=2 to N do begin
f := true;
for j:=1 to M do
if a[i] = b[j] then
f := false;
if f = true then begin
M := M + 1;
b[M] := a[i];
end;
end;
for i:=1 to M do
write (b[i]:2);
writeln;
end.
Пример выполнения кода:
1 8 0 3 7 0 7 9 5 0
1 8 0 3 7 9 5