Задание №16 — Алгоритмы и программирование
Напишите программу, которая в последовательности натуральных десятичных чисел определяет наименьший элемент, запись которого
в системе счисления с основанием 9 оканчивается цифрой 1. Если среди входных данных таких элементов нет, программа должна вывести «NO».
Программа получает на вход натуральные десятичные числа,
не превышающие 30 000, каждое в отдельной строке. Количество введённых чисел неизвестно, их последовательность заканчивается числом 0 (0 – признак окончания ввода, в последовательность не входит).
Программа должна вывести одно десятичное число – наименьший элемент последовательности, запись которого в 9-ричной системе счисления оканчивается цифрой 1, или «NO», если среди входных данных таких элементов нет.
Пример работы программы
Входные данные | Выходные данные |
10 9 11 91 28 0 | 10 |
Проверка решения с помощью ИИ доступна авторизованным пользователям
Решение.
Для решения этой задачи нам необходимо последовательно считывать числа до тех пор, пока не встретится 0. Для каждого числа нужно проверить условие: оканчивается ли его запись в 9-ричной системе счисления на цифру 1.
Шаг 1: Как проверить последнюю цифру в системе счисления?
Последняя цифра числа в любой системе счисления с основанием — это остаток от деления этого числа на . В нашем случае основание системы равно 9. Значит, число в 9-ричной записи оканчивается на 1, если остаток от его деления на 9 равен 1. Математически это записывается так: .
Шаг 2: Поиск минимума.
Чтобы найти наименьшее число, введём переменную-флаг или инициализируем переменную для минимума значением, которое заведомо больше любого возможного входного числа. По условию числа не превышают 30 000, поэтому в качестве начального значения минимума можно взять .
Шаг 3: Алгоритм действий.
1. Создаём переменную min_val и присваиваем ей значение .
2. В цикле считываем число . Если , прерываем цикл.
3. Проверяем условие: если и при этом , то обновляем значение минимума: min_val = x.
4. После окончания цикла проверяем, изменилось ли значение min_val. Если оно осталось равным , значит, подходящих чисел не было, и нужно вывести «NO». В противном случае выводим найденное значение min_val.
Разбор примера:
Ввод: 10, 9, 11, 91, 28, 0.
- 10: . Подходит. min_val = 10.
- 9: . Не подходит.
- 11: . Не подходит.
- 91: . Подходит, но . Минимум не меняем.
- 28: . Подходит, но . Минимум не меняем.
- 0: Конец ввода.
Результат: 10.
Пример реализации на языке Python:
min_val = 30001
while True:
x = int(input())
if x == 0: break
if x % 9 == 1:
if x < min_val:
min_val = x
if min_val == 30001:
print("NO")
else:
print(min_val)
Ответ: 10
Источник: ФИПИ