Задание 27 ЕГЭ по информатике · C04179
Программа и описание алгоритмаВысокаяКЭС 3.2КЭС 3.3
На вход программе подаются строчные английские буквы. Ввод этих символов заканчивается точкой (другие символы, отличные от «.» и букв «a»..«z», во входных данных отсутствуют; в программе на языке Бейсик символы можно вводить по одному в строке, пока не будет введена точка). Требуется написать эффективную программу, которая будет печатать буквы, встречающиеся во входной последовательности, в порядке уменьшения частоты их встречаемости. Каждая буква должна быть распечатана один раз. Точка при этом не учитывается.
Если какие-то буквы встречаются одинаковое число раз, то они выводятся в алфавитном порядке. Например, если на вход подаются символы batat., программа должна вывести atb.
Если какие-то буквы встречаются одинаковое число раз, то они выводятся в алфавитном порядке. Например, если на вход подаются символы batat., программа должна вывести atb.
Развёрнутый ответ: проверяется по критериям ФИПИ.
Подсказки (3)
- Как можно за один проход по входной последовательности подсчитать количество вхождений каждой из 26 букв?
- Создайте массив частот длины 26, а затем отсортируйте буквы по ключу: сначала по убыванию частоты, затем по алфавитному порядку.
- В Python можно использовать sorted('abcdefghijklmnopqrstuvwxyz', key=lambda c: (-count[ord(c) - ord('a')], c)) и вывести только буквы с ненулевой частотой.
Решение
1. Для каждой из 26 строчных английских букв создаём счётчик. При чтении очередного символа до точки увеличиваем счётчик соответствующей буквы.
count[ord(c)−ord(′a′)]+=1
2. После окончания ввода формируем последовательность всех букв алфавита. Сортируем её по двум критериям: сначала по убыванию частоты, затем по возрастанию самой буквы. Алфавитный порядок при равных частотах обеспечивается вторым ключом сортировки.
key(c)=(−count[c],c)
3. Буквы с нулевой частотой не выводим. Остальные печатаем в полученном порядке без разделителей.
O(26log26)=O(1)
4. Пример реализации на Python:
count=[0]∗26whileTrue:c=input().strip()ifc==′.′:breakcount[ord(c)−ord(′a′)]+=1letters=′abcdefghijklmnopqrstuvwxyz′order=sorted(letters,key=lambdac:(−count[ord(c)−ord(′a′)],c))print(′′.join(cforcinorderifcount[ord(c)−ord(′a′)]>0))
5. Для последовательности batat частоты букв равны: a — 2, t — 2, b — 1. Поэтому буквы a и t выводятся в алфавитном порядке, затем b: atb.
count[ord(c)−ord(′a′)]+=1
2. После окончания ввода формируем последовательность всех букв алфавита. Сортируем её по двум критериям: сначала по убыванию частоты, затем по возрастанию самой буквы. Алфавитный порядок при равных частотах обеспечивается вторым ключом сортировки.
key(c)=(−count[c],c)
3. Буквы с нулевой частотой не выводим. Остальные печатаем в полученном порядке без разделителей.
O(26log26)=O(1)
4. Пример реализации на Python:
count=[0]∗26whileTrue:c=input().strip()ifc==′.′:breakcount[ord(c)−ord(′a′)]+=1letters=′abcdefghijklmnopqrstuvwxyz′order=sorted(letters,key=lambdac:(−count[ord(c)−ord(′a′)],c))print(′′.join(cforcinorderifcount[ord(c)−ord(′a′)]>0))
5. Для последовательности batat частоты букв равны: a — 2, t — 2, b — 1. Поэтому буквы a и t выводятся в алфавитном порядке, затем b: atb.
Частые ошибки
- Сортировка по возрастанию частоты вместо убывания.
- Нарушение алфавитного порядка для букв с одинаковой частотой.
- Вывод точки или букв, которые не встречались во входной последовательности.
- Подсчёт частот с использованием квадратичного перебора вместо массива из 26 счётчиков.
- Вывод каждой буквы несколько раз вместо однократного вывода.
Источник: Открытый банк ФИПИ
Похожие задания
27Рассматриваются все пары различных элементов последовательности: элементы пары не обязаны стоять рядом…Программа и описание алгоритма · 8180D727Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности…Программа и описание алгоритма · 8F133027Рассматриваются все пары различных элементов последовательности: элементы пары не обязаны стоять в…Программа и описание алгоритма · 902B8427Рассматриваются все пары различных элементов последовательности: порядок элементов в паре не важен.…Программа и описание алгоритма · BCE6F127Рассматриваются все пары различных элементов последовательности: элементы пары не обязаны стоять рядом…Программа и описание алгоритма · E3E82427На вход программе подаются сведения о пассажирах, сдавших свой багаж в камеру хранения. В первой строке…Программа и описание алгоритма · E9F6D627Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 3…Программа и описание алгоритма · ED6EB927Рассматриваются все пары различных элементов последовательности: элементы пары могут быть расположены в…Программа и описание алгоритма · F9556D
Нужен репетитор по информатике?
Посмотрите репетиторов, которые ведут занятия в Precettore, или оставьте заявку — подберём сами.
Готовьтесь к ЕГЭ по информатике в Precettore
Варианты с автопроверкой, домашние задания от репетитора, онлайн-доска и разбор ошибок — в одном кабинете. Регистрация бесплатная.