Во многих играх порядок ходов определяется броском кубика или монетки, а в нашей первым ходит тот, чье имя лексикографически меньше. Определите, кто из игроков будет ходить первым.
Формат ввода
В первой строке записано одно натуральное число N — количество игроков.
В каждой из последующих N строк указано одно имя игрока.
Формат вывода:
Имя игрока, который будет ходить первым.
Пример
Ввод
3
Вова
Аня
БоряВывод
АняВвод
4
Толя
Коля
Вася
ЮляВывод
ВасяРешение
Одна из проблем поиска максимального или минимального значения — проблема выбора первого элемента. Обычно это или минимально или максимально возможное значение.
Для положительных чисел при поиска максимума это может быть 0 или даже -1. Для строк при поиске минимума среди русских слов — ‘яяяяяяяяя’ (подумайте почему).
Но, что если нам надо найти минимальное число среди последовательности любых чисел? Какое бы начальное «максимальное» значение мы не выбрали, всегда может найтись последовательность, где все числа будут больше чем выбранное нами значение. Аналогично и с минимальным. Какое бы большое число мы не выбрали, всегда найдется последовательность, где все элементы будут больше этого числа.
Как же быть? В этом случае можно ввести дополнительную переменную, которая будет означать что мы еще ни с чем наше число не сравнивали и тогда, можно будет и за максимум и за минимум взять первое полученное число.
Второе решение демонстрирует именно этот подход. Несмотря на то, что он кажется чуть более сложным, он очень важен, так как демонстрирует примем программирования, известный под условным названием «использование флага». Суть приема заключается в том, что вы устанавливаете какое-то значение, которое является индикатором наступления какого-то события (в нашем случае пустоту начального значения для сравнения) и если переменная «пустая» то можно выполнить то или иное действие, попутно изменив ее значение, в случае, если поменялись условия. Мы еще встретимся с этим приемом в более поздних задачах.
Посмотреть код
Решение
count = int(input())
first = 'яяяяяяяя'
for _ in range(count):
name = input()
if name < first:
first = name
print(first)
Решение
# пример использования пустого значения для инициализации минимального значения
count = int(input())
first = ''
for _ in range(count):
name = input()
if first == '':
first = name
elif name < first:
first = name
print(first)
Доброго времени суток! Помогите, пожалуйста, разобраться в вопросах ниже:
1) ‘яяяяяяяя’ и просто ‘я’ по UTF-8 это тоже самое?
| 1103 | U+044F | D1 8F | я | Cyrillic Small Letter Ya |
2) for _ — что означает нижнее подчёркивание у цикла for? Умышленное отсутствие переменной для работы цикла?
3) first = ‘ ‘ — что означает пустые кавычки у переменной first? Переменная с пустым, неизвестным значением?
1) ‘яяяяяяяя’ и просто ‘я’ это разные сущности. Первое — несколько раз повторенное второе. Но если мы возьмем одну будку я от первой строки, то она будет ровно такой же как вторая ‘я’.
2) Подчерк в for означает, что имя переменной неважно, так как она дальше нигде не используется. Это тонкости языка, связанные с его быстродействием.
3) Это довольно распространенный прием — инициализация пустым значением, Иногда для этого используют специальное значение None, но его еще не давали и порэтому обходимся тем, что есть. Суть приема в том, что для стартового значения вы выбираете значение, которое гарантировано не может встретиться в последовательности. В данном случае имя не может быть пустой строкой, поэтому пустая строка в качестве признака отсутствия значения нам подходит. Далее, при проверки, если мы видим, что значение переменной пустое, то мы без сравнений берем первое же значение за максимум/минимум, смотря что нам дано по условию.
Большое спасибо, Сергей, за ваши ответы!)