понедельник, 15 июня 2015 г.
Пример решения задач С27 с использованием множеств.
14:58 | Автор:
ЛАИ |
Изменить сообщение
Рассмотрим не совсем обычный способ решения вполне стандартной задачи С27. Используем множество и необычную нумерацию элементов массива (не цифровую, а символьную).
В сборнике задач Константина Полякова можно найти такую задачу:
---------------------------------------------------------------------------------------------------------
В сборнике задач Константина Полякова можно найти такую задачу:
---------------------------------------------------------------------------------------------------------
На вход программы подаются произвольные
алфавитно-цифровые символы. Ввод этих символов заканчивается точкой. Требуется
написать программу, которая будет печатать последовательность строчных
английских букв ('a' 'b'... 'z') из входной последовательности и частот их
повторения. Печать должна происходить в алфавитном порядке. Например, пусть на
вход подаются следующие символы:
fhb5kbfыshfm.
В этом случае
программа должна вывести
b2
f3
h2
kl
ml
s1
---------------------------------------
Для решения первым способом ("в лоб") надо знать коды маленьких латинских букв (a-97, b-98, ...,z-122):
program C27_3_1;
var
a: array[97..122] of integer;
c: char;
k: integer;
begin
for k:=97 to 122 do begin a[k]:=0; end;
repeat
read(c);
k:=ord(c);
if (k>=97) and (k<=122) then a[k]:=a[k]+1;
until c='.';
for k:=97 to 122 do
begin
if a[k]>0 then begin c:=chr(k);writeln(c, a[k]); end;
end;
end.
var
a: array[97..122] of integer;
c: char;
k: integer;
begin
for k:=97 to 122 do begin a[k]:=0; end;
repeat
read(c);
k:=ord(c);
if (k>=97) and (k<=122) then a[k]:=a[k]+1;
until c='.';
for k:=97 to 122 do
begin
if a[k]>0 then begin c:=chr(k);writeln(c, a[k]); end;
end;
end.
Второй способ подразумевает использование массива-счетчика, индексами элементов которого являются сами подсчитываемые буквы a: array ['a'..'z'] of integer.
Кроме этого создадим множество маленьких латинских букв mn=['a'..'z'].
program c27_3_2;
Const
mn=['a'..'z'];
var c: char;
a: array ['a'..'z'] of integer;
Begin
repeat
read(c);
if c in mn then a[c]:=a[c]+1;
until c='.';
for c:='a' to 'z' do
if a[c]>0 then writeln(c, ' ', a[c]);
End.
Const
mn=['a'..'z'];
var c: char;
a: array ['a'..'z'] of integer;
Begin
repeat
read(c);
if c in mn then a[c]:=a[c]+1;
until c='.';
for c:='a' to 'z' do
if a[c]>0 then writeln(c, ' ', a[c]);
End.
Программа поражает своей простотой и лаконичностью. Поучительным является тот факт, что переменная цикла - символьная величина.
Подписаться на:
Комментарии к сообщению (Atom)
0 коммент.:
Отправить комментарий