Pers.narod.ru. Алгоритмы. Удаление повторяющихся значений из массива |
Такая задача нередко возникает при анализе данных. Хорошо программистам на PHP, у которых
есть стандартная функция array_unique
для этой цели, а вот на компилируемых языках приходится изобретать. Первое, что приходит в голову - ввести дополнительный массив,
в который перепишем элементы исходного массива, встречающиеся только один раз. Теоретически мы
должны найти последние вхождения каждого элемента и посчитать их как единственные.
const n=10; a: array [1..n] of integer=(1,2,3,1,0,-2,2,5,4,0); var b: array [1..n] of integer; i,j,k,l:integer; begin l:=0; for i:=1 to n do begin k:=1; for j:=i+1 to n do if a[i]=a[j] then inc(k); if k=1 then begin inc(l); b[l]:=a[i]; end; end; writeln ('Уникальные элементы'); for i:=1 to l do write (b[i]:3); reset (input); readln; end.
Можно обойтись и без использования дополнительного массива, но тогда понадобится ещё один цикл для "сжатия" массива с целью удаления лишних повторений.
const size=10; a: array [1..size] of integer=(1,2,3,1,0,-2,2,5,4,0); var i,j,k,n:integer; begin n:=size; i:=1; while i<=n do begin j:=i+1; while j<=n do begin if a[i]=a[j] then begin for k:=j to n-1 do a[k]:=a[k+1]; dec(n); end else inc(j); end; inc(i); end; writeln ('Уникальные элементы'); for i:=1 to n do write (a[i]:3); reset (input); readln; end.
Для нашего теста в обоих случаях получаем 1 2 3 0 -2 5 4, но второй алгоритм сохранит первоначальный порядок элементов в массиве.
гостевая; E-mail |