Задача. Найти количество различных чисел в массиве из N элементов.
Как будем решать задачу (2 способа)
для хранения уникальных значений исходного массива будем использовать:- новый массив
- множество
Способ 1
Сформируем массив a случайных чисел из диапазона от 0 до 20.
Заведем массив b и заполним все его ячейки числами -1.
Переменной j присвоим значение 0.
В цикле для k от 1 до n:
- Присвоим флагу f значение true, это будет означать, что ячейка a[k] хранит уникальное значение, и его нет в массиве b.
- В цикле для s от 1 до j сравним значение a[k] со значениями массива b (a[k]=b[s]), если условие верно, флагу присвоим значение false.
- Если флаг не поменял значение true на false и хранит значение true, счетчик j увеличим на 1 и сохраним в ячейке b[j] значение a[k].
В итоге переменная j будет хранить количество измененных ячеек массива b - количество различных элементов исходного массива.
Программа решения задачи на языке Паскаль (способ 1)
const n = 10;
var a,b:array[1..n] of integer;
k,s,j:integer;
f:boolean;
begin
write('Исходный массив: ');
for k:=1 to n do
begin
a[k]:=random(21); write(a[k],' ');
b[k]:=-1;
end;
j:=0;
for k:=1 to n do
begin
f:=true; //элемента a[k] нет в массиве b
for s:=1 to j do if a[k]=b[s] then f:=false;
if f then begin j+=1; b[j]:=a[k]; end;
end;
writeln;
write('Неповторяющиеся числа: ');
for k:=1 to j do write(b[k],' ');
writeln;
writeln('Количество различных чисел: ',j);
end.
Способ 2
Заведем пустое множество m.
Сформируем массив a случайных чисел из диапазона от 0 до 20.
В цикле для k от 1 до n:
- если значение a[k] нет в множестве m, увеличим счетчик j на 1,
- добавим значение a[k] в множество m.
В итоге переменная j будет хранить длину сформированного множества, то есть количество различных значений исходного массива
В цикле foreach k in m do
(для каждого k, имеющегося в множестве m) выведем значения, сохраненные в множестве m.
Программа решения задачи на языке Паскаль (способ 2)
const n = 10;
var a:array[1..n] of integer;
k,j:integer;
m:set of integer;
begin
m:=[];
j:=0;
write('Исходный массив: ');
for k:=1 to n do
begin
a[k]:=random(21); write(a[k],' ');
if not(a[k] in m) then j+=1;
m:=m+[a[k]];
end;
writeln;
write('Неповторяющиеся числа: ');
foreach k in m do write(k,' ');
writeln;
writeln('Количество различных чисел: ',j);
end.
Результат запуска программы
Комментариев нет:
Отправить комментарий