Вот подробное решение задачи.
Цель задачи
- Нужно прочитать последовательность фамилий до слова СТОП и определить, сколько фамилий имеют наибольшую (максимальную) длину.
Пошаговый алгоритм
- Инициализация:
- max_len = 0 (максимальная встречавшаяся длина)
- count = 0 (число фамилий с такой длиной)
- Для каждой введённой фамилии w до достижения слова "СТОП":
- Длина текущей фамилии: l = длина(w)
- Если l > max_len:
- max_len = l
- count = 1 Иначе, если l == max_len:
- count += 1 Иначе (l < max_len): ничего не меняем
- Как только встретили "СТОП", вывести count.
- Особый случай: если перед словом "СТОП" не было ни одной фамилии, вывести 0.
Смысл решения
- Мы поддерживаем текущую максимальную длину и количество фамилий, имеющих эту длину. Когда встречаем более длинную фамилию, сбрасываем счётчик до 1. Когда встречаем фамилию той же длины, увеличиваем счётчик. В конце — искомое количество.
Сложность
- Время: On, где n — количество фамилий до СТОП.
- Память: O(1) дополнительно.
Пример Ввод: Иванов Петров Кузнецов Иванов Степанов СТОП
- Иванов: 6 -> max_len=6, count=1
- Петров: 6 == max_len -> count=2
- Кузнецов: 8 > max_len -> max_len=8, count=1
- Иванов: 6 < max_len -> ничего
- Степанов: 8 == max_len -> count=2
- СТОП: завершаем
Вывод: 2
Готовый код на Python (для иллюстрации; можно адаптировать под ваш язык/среду) def count_max_surnames(words): max_len = 0 count = 0 for w in words: if w == "СТОП": break l = len(w) if l > max_len: max_len = l count = 1 elif l == max_len: count += 1 return count
Если хочешь, могу привести решение под конкретный язык программирования или привести дополнительные примеры.