Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
24
Добавлен:
19.05.2015
Размер:
719.36 Кб
Скачать

Var c: char;

num: array[0..9] of integer;

I, k, count: integer;

begin

{ обнулить счетчики }

for i:=0 to 9 do num[i] := 0;

count := 0;

{ читаем последовательность }

repeat

read(c);

{ если цифра, увеличили счетчик }

if ('0' <= c) and (c <= '9') then begin

k := Ord(c) - Ord('0');

num[k] := num[k] + 1;

count := count + 1;

end;

until c = '.';

{ если только нули }

if (count = num[0]) and (num[0] > 0) then

num[0] := 1;

{ вывод результата }

if count = 0 then

writeln('Нет')

else writeln('Да');

for i:=9 downto 0 do

for k:=1 to num[i] do write(i);

end.

Возможно еще одно аналогичное решение, где индексы у массива – символьные:

Var c, I: char;

num: array['0'..'9'] of integer;

k, count: integer;

begin

{ обнулить счетчики }

for i:='0' to '9' do num[i] := 0;

count := 0;

repeat

read(c);

{ если цифра, увеличили счетчик }

if ('0' <= c) and (c <= '9') then begin

num[c] := num[c] + 1;

count := count + 1;

end;

until c = '.';

{ если только нули }

if (count = num['0']) and (num['0'] > 0) then

num['0'] := 1;

{ вывод результата }

if count = 0 then

writeln('Нет')

else writeln('Да');

for i:='9' downto '0' do

for k:=1 to num[i] do write(i);

end.

  1. В этой задаче, как и в предыдущей, нас тоже интересует только количество разных цифр, поэтому при вводе будем считать их с помощью массива.

Затем нужно отсортировать массив по возрастанию. Но при этом возникает проблема – мы потеряем информацию о том, какой цифре соответствует, например, счетчик num[0]. Поэтому заведем другой массив ind, в котором будем хранить цифры, соответствующие счетчикам. Например, если в ind[2] находится число 5, то num[2]– это количество цифр '5'. В начале программы в i-й элемент массива ind записываем число i (цифры стоят по порядку):

for i:=0 to 9 do ind[i] := i;

После чтения данных нужно отсортировать цифры по возрастанию частоты встречаемости, причем при одинаковой частоте встречаемости порядок должен сохраниться. Этим свойством обладает, например, метод сортировки «пузырьком»:

for i:=0 to 8 do

for j:=8 downto i do

if num[j] > num[j+1] then begin

k:=num[j]; num[j]:=num[j+1]; num[j+1]:=k;

k:=ind[j]; ind[j]:=ind[j+1]; ind[j+1]:=k;

end;

Обратите внимание, что при перестановке элементов массива num также переставляются и соответствующие элементы массива ind, чтобы сохранить информацию о том, каким цифрам соответствуют счетчики массива num.

Выводить нужно только те цифры, для которых счетчик больше нуля, причем саму цифру берем из массива ind:

for i:=0 to 9 do

if num[i] > 0 then write(ind[i]);

Вот полная программа:

Var c: char;

num, ind: array[0..9] of integer;

I, j, k: integer;

begin

{ начальные значения }

for i:=0 to 9 do begin

num[i] := 0;

ind[i] := i;

end;

{ ввод данных, подсчет цифр в массиве num }

repeat

read(c);

if ('0' <= c) and (c <= '9') then begin

k := Ord(c) - Ord('0');

num[k] := num[k] + 1;

end;

until c = '.';

{ сортировка «пузырьком» }

for i:=0 to 8 do

for j:=8 downto i do

if num[j] > num[j+1] then begin

k:=num[j]; num[j]:=num[j+1]; num[j+1]:=k;

k:=ind[j]; ind[j]:=ind[j+1]; ind[j+1]:=k;

end;

{ вывод результата }

for i:=0 to 9 do

if num[i] > 0 then write(ind[i]);

end.

Еще одно решение этой задачи предложил А. Тарасов (с. Красноусольский, Республика Башкортостан):

Соседние файлы в папке ЕГЗ_2012_Поляков_май