Вот подробное решение задачи 3: сколько самых длинных слов (фамилий), до слова СТОП.
Цель: понять принцип и получить числовой ответ по входной последовательности.
Идея:
- Пробегаем по последовательности фамилий до встречи слова СТОП (оно не считается).
- Находим максимальную длину фамилии.
- Считаем, скольким фамилиям этой максимальной длины соответствуют.
Пошаговый алгоритм:
- Завести две переменные: max_len = 0 и count = 0.
- Читать фамилию по одной до тех пор, пока не встретится СТОП:
- Если строка равна СТОП, завершить цикл.
- Пусть l = длина текущей фамилии (после удаления лишних пробелов по желанию).
- Если l > max_len: задать max_len = l и сбросить count = 1 (эта фамилия пока единственная с новой максимальной длиной).
- Если l == max_len: увеличить count на 1.
- Если l < max_len: ничего не делать.
- Вывести count. Если перед СТОП не было ни одной фамилии, ответ будет 0.
- Время выполнения: O(n), память: O(1).
Пример реализации на Python (пошаговый минималистичный вариант):
- Ввод читается построчно; строка приводится к верхнему регистру не обязательно, но можно сравнивать точно как указано — СТОП.
- Счётчик обновляется согласно правилу выше.
Код (Python): def count_longest_surnames(): max_len = 0 count = 0 while True: try: s = input().strip() except EOFError: break if s == "СТОП": break l = len(s) if l > max_len: max_len = l count = 1 elif l == max_len: count += 1 print(count)
Как это работает:
- Если в последовательности есть фамилии: Иванов (6), Петров (6), Сидоров (7), Кузнецов (9), Иванов (6), STOP.
- max_len становится 9 после Кузнецов, count = 1.
- Вывод: 1.
- Если две фамилии имеют одинаковую максимальную длину, например Смирнов (7) и Миронов (7) и STOP — ответ будет 2.
Дополнительные примеры:
- Ввод: Иванов Петров Сидоров СТОП Вывод: 1 (макс. длина 7 у Сидоров).
- Ввод: Андреев Петров Смирнов Смирнов СТОП Вывод: 2 (макс. длина 7 у Смирнов два раза).
Если хочешь, могу адаптировать решение под другой язык программирования или привести псевдокод без привязки к конкретной парадигме.