Задание OGEINF2130E9: Написание программы

ФИПИ · ОГЭ · все форматы ответа · 1585 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Написание программы.

Учебные темы: Табличные величины (массивы). Одномерные массивы. Составление и отладка программ, реализующих типовые алгоритмы обработки одномерных числовых массивов, на одном из языков программирования (Python, C++, Паскаль, Java, C#, Школьный Алгоритмический Язык): заполнение числового массива случайными числами, в соответствии с формулой или путём ввода чисел, нахождение суммы элементов массива, линейный поиск заданного значения в массиве, подсчёт элементов массива, удовлетворяющих заданному условию, нахождение минимального (максимального) элемента массива. Сортировка массива. Обработка потока данных: вычисление количества, суммы, среднего арифметического, минимального и максимального значения элементов последовательности, удовлетворяющих заданному условию.

Дайте развернутый ответ.

Напишите программу, которая в последовательности натуральных десятичных чисел определяет наименьший элемент, запись которого
в системе счисления с основанием 9 оканчивается цифрой 1. Если среди входных данных таких элементов нет, программа должна вывести «NO».

Программа получает на вход в первой строке натуральное число – количество чисел N (3 ≤ N ≤ 10 000), затем N натуральных чисел,
не превышающих 30 000, каждое в отдельной строке.

Программа должна вывести одно десятичное число – наименьший элемент последовательности, запись которого в 9-ричной системе счисления оканчивается цифрой 1, или «NO», если среди входных данных таких элементов нет.

 

Пример работы программы

Входные данные

Выходные данные

5

10

9

11

91

28

10

 


 

i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.2 Язык программирования (Python, C++, Паскаль, Java, C#, Школьный Алгоритмический Язык). Система программирования: редактор текста программ, транслятор, отладчик. Переменная: тип, имя, значение. Целые, вещественные и символьные переменные. Оператор присваивания. Арифметические выражения и порядок их вычисления. Операции с целыми числами: целочисленное деление, остаток от деления. Ветвления. Составные условия (запись логических выражений на изучаемом языке программирования). Нахождение минимума и максимума из двух, трёх и четырёх чисел. Решение квадратного уравнения, имеющего вещественные корни. Цикл с условием. Алгоритм Евклида для нахождения наибольшего общего делителя двух натуральных чисел. Разбиение записи натурального числа в позиционной системе с основанием, меньшим или равным 10, на отдельные цифры. Цикл с переменной. Алгоритмы проверки делимости одного целого числа на другое, проверки натурального числа на простоту
Тип ответа:Развернутый ответ
Номер: 2130E9
НЕ РЕШЕНО Изменить статус

Решение задания OGEINF2130E9

Ответ: Программа приведена в шаге 3

1. Разберём формат ввода.
Сначала читаем N — количество элементов или участников, затем обрабатываем ровно N записей. Первое число N не участвует в вычислении результата. Для каждой записи читаем одно число. Данные могут быть разделены переносами строк или пробелами: программа одинаково обрабатывает оба варианта.

2. Выберем алгоритм.
Последняя цифра в системе с основанием 9 равна остатку от деления модуля числа на 9. Требуемый остаток — 1. Используем равенство |x| = 9 · q + r, где 0 ≤ r ≤ 8. Поэтому весь перевод записи числа не нужен.
Переменная best сначала равна None — это признак того, что подходящего числа ещё нет. Первое подходящее значение записываем в best. Затем выбираем меньшее из best и очередного подходящего x.
Если подходящих элементов не оказалось, выводим строго NO.

3. Программа на Python 3.

import sys

data = iter(map(int, sys.stdin.buffer.read().split()))
count = 0
total = 0
best = None
n = next(data)
for _ in range(n):
    x = next(data)
    if abs(x) % 9 == 1:
        count += 1
        if best is None:
            best = x
        else:
            best = min(best, x)
if count == 0:
    print("NO")
else:
    print(best)

4. Проверка и обоснование.
Пример 1. Входные числа: 5 10 9 11 91 28.
Подходящие элементы: 10, 91, 28. Их количество — 3.
Вывод: 10.
После каждой обработанной записи накопленные значения точно описывают уже просмотренную часть данных. На очередном шаге неподходящий элемент ничего не меняет, а подходящий учитывается один раз. После последней записи получаем результат для всей последовательности. Каждая запись обрабатывается один раз, поэтому время работы линейно по количеству записей. Алгоритму достаточно нескольких накопителей; приведённый способ чтения сохраняет входной текст, поэтому общая память программы линейна по размеру ввода.

Ответ: Программа приведена в шаге 3.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании OGEINF2130E9.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.