Другие языки программирования и технологии

2. Отсортировать массив из n чисел и подсчитать количество уникальных чисел в массиве. на паскале

Shovkat Djurayev
Shovkat Djurayev
92
У Вас массив какой и откуда он берётся? Допустим это целочисленный динамический массив с псевдо-случайными элементами из диапазона [a;b], границы которого задаются в одной строке вместе с длиной массива n, причём a≤b. Числа a, b и n - относительно небольшие - это для того чтобы массив было удобно печатать и сортировать:
 uses crt; 
var a, b, c, i, j, m, n: integer;
Arr: array of integer;

procedure print_array();
begin
j := 0;
for i := 0 to m do
begin
write(Arr[i]: 6);
j := j + 1;
if j = 10 then
begin
j := 0;
writeln()
end;
end;
if j > 0 then writeln()
end;

begin
textbackground(white);
textcolor(black);
clrscr();
write('a b n: ');
readln(a, b, n);
c := b + 1 - a;
setlength(Arr, n);
randomize();
m := n - 1;
for i := 0 to m do Arr[i] := a + random(c);
writeln('Исходный массив:');
print_array();
for i := 1 to m do
for j := m downto i do
if Arr[j - 1] > Arr[j] then
begin
c := Arr[j - 1];
Arr[j - 1] := Arr[j];
Arr[j] := c
end;
writeln('Отсортированный массив:');
print_array();
c := 1;
for i := 1 to m do
if Arr[i - 1] Arr[i] then c := c + 1;
writeln('Уникальных элементов: ', c)
end.
Сортировка - пузырьковая по возрастанию. А если бы n было, скажем, миллион, то и сам алгоритм пузырьковой сортировки был бы здесь совершенно неуместен. Поэтому и надо сразу указывать что это за массив - какого типа, какого размера и откуда вообще берётся. Вот пример сеанса:
Bacho Tsintsadze
Bacho Tsintsadze
66 572
Лучший ответ
 std::sort(mas, mas + len); 
затем пройтись по нему если очередной элемент массива отличается от предыдущего то прибавлять к счетчику 1
Игорь Лимонов
Игорь Лимонов
5 292
program SortAndCountUniqueNumbers;
const
MAX_SIZE = 100;
var
numbers: array[1..MAX_SIZE] of Integer;
n, i, j, temp, uniqueCount: Integer;
begin
uniqueCount := 0;

// Ввод размера массива
Write('Введите количество чисел в массиве (n): ');
ReadLn(n);

// Ввод элементов массива
WriteLn('Введите элементы массива:');
for i := 1 to n do
ReadLn(numbers[i]);

// Сортировка массива методом пузырька
for i := 1 to n - 1 do
begin
for j := 1 to n - i do
begin
if numbers[j] > numbers[j + 1] then
begin
temp := numbers[j];
numbers[j] := numbers[j + 1];
numbers[j + 1] := temp;
end;
end;
end;

// Подсчет уникальных чисел
uniqueCount := 1;
for i := 2 to n do
begin
if numbers[i] <> numbers[i - 1] then
Inc(uniqueCount);
end;

// Вывод отсортированного массива
WriteLn('Отсортированный массив:');
for i := 1 to n do
WriteLn(numbers[i]);

// Вывод количества уникальных чисел
WriteLn('Количество уникальных чисел в массиве: ', uniqueCount);
end.

Похожие вопросы