Это задача для начинающих, всего 15% сложность и, казалось, в ней нет ничего необычного, но в обсуждении многие не понимают, как решать её без использования массива. Давайте посмотрим.
Условие довольно короткое, поэтому начнём решать сразу со считывания данных. Будем писать код сразу на двух языках: C++ и Python.
И вот тут встаёт вопрос, что делать со считанными данными? Конечно, можно положить их в массивы. Есть много вариантов: положить в два массива (или массив pair), потом обработать; добавить условие и в массив чисел класть только возраст мужчин, и потом найти максимум в этом массиве. Однако все они так или иначе приводят к поиску наибольшего элемента.
И если мы вспомним, как находить максимальный элемент в массиве, то заметим, что это делается в один проход по массиву слева направо, а это главный показатель того, что нет необходимости хранить все элементы массива. Подобные рассуждения мы проводили, решая задачу про числа Фибоначчи.
Итак, что нам надо знать, чтобы корректно обработать текущего жильца? Если это женщина, то, простите, нам вообще ничего не надо делать. Если это мужчина, то надо понять, является ли он самым старшим, для этого, значит, надо хранить возраст самого старшего среди уже просмотренных (и при необходимости обновлять это значение). Также, по условию задачи, нам надо вывести номер жильца, поэтому вместе с возрастом самого старшего мужчины, придётся хранить и его номер.
Отлично, заведём пару переменных для этого. Проинициализируем крайними значениями, чтобы они точно обновились при обработке первого жильца-мужчины:
Теперь можно в цикле, который считывает данные, сразу и написать обработку: проверим, что это мужчина, и сравним его возраст с максимальным, которого встречали до этого:
Интересные три строчки, которые показывают особенности языков. В С++ всякие скобочки и амперсанды, но зато нет необходимости сравнивать s с единицей, и использование запятой более читаемое, чем в Python.
Осталось лишь вывести ответ.
На этом всё. Но не спешите, постоянные читатели должны были заметить, что подобный механизм решения без использования массив (когда задача решается в один проход слева направо) можно применить в задаче Пилообразная последовательность, которую мы недавно разбирали. Для закрепления материала рекомендую переписать то решение, использовав этот трюк.
Предыдущий выпуск: Задача 564. Забор - 2
Я очень хочу, чтобы мои советы были полезны вам, а для того, чтобы быстрее всех получать новые статьи можно подписаться на мой канал.