Решение: Минимальное число в девятеричной системе
Напишите программу, которая в последовательности натуральных десятичных чисел определяет наименьший элемент, запись которого в системе счисления с основанием 9 оканчивается цифрой 1. Если среди входных данных таких элементов нет, программа должна вывести «NO».
Программа получает на вход в первой строке натуральное число $N$ ($3 \leq N \leq 10\,000$), затем $N$ натуральных чисел, не превышающих 30 000, каждое в отдельной строке.
Программа должна вывести одно десятичное число — наименьший элемент последовательности, запись которого в 9-ричной системе счисления оканчивается цифрой 1, или «NO», если среди входных данных нет подходящих элементов.
Решение по шагам
4 шагаПоследняя цифра записи натурального числа в системе счисления с основанием 9 определяется остатком от деления этого числа на 9. Поэтому подходящими являются числа, для которых остаток равен 1.
$$x \bmod 9 = 1$$Перебираем все $N$ чисел. Если число подходит, сохраняем его, если оно меньше текущего найденного минимума.
Для обозначения отсутствия найденного числа удобно использовать значение None. После обработки всех чисел выводим минимум либо строку NO.
Один из корректных вариантов программы:
$$n = int(input())\nbest = None\nfor _ in range(n):\n x = int(input())\n if x % 9 == 1 and (best is None or x < best):\n best = x\nif best is None:\n print('NO')\nelse:\n print(best)$$n = int(input())
best = None
for _ in range(n):
x = int(input())
if x % 9 == 1 and (best is None or x < best):
best = x
if best is None:
print('NO')
else:
print(best)
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Проверяют делимость числа на 9 вместо проверки остатка 1.
Выводят первое найденное подходящее число, не сравнивая его с остальными.
Инициализируют минимум нулём, хотя все входные числа натуральные и ноль не должен считаться подходящим результатом.
Забывают вывести NO, если подходящих чисел нет.