Похожая задача рассматривалась в этом топике:
http://freepascal.ru/forum/viewtopic.php?f=23&t=6931Решение от
tema имеет квадратичную сложность, но зато не требует дополнительной памяти.
Вот другое решение (для положительных чисел), сложность линейная, но используется массив.
Код: Выделить всё
const CSize = ...; // размер массива
var
Numbers: array [0...CSize] of integer; // обрабатываемый массив
Counts: array [0...MaxInt] of integer; // массив счетчиков
i : integer;
begin
FillChar(Counts, SizeOf(Counts), 0); // очистка счетчиков
// накопление счетчиков (число в массиве - это индекс счетчика)
for i:=0 to CSize-1 do Inc( Counts[ Numbers[i] ] );
// Пробегаем по массиву Counts и выбраем те, что содержат единицу
for i:=0 to MaxInt do if Counts[i]=1 then Writeln(i);
end.