ФИПИ · ОГЭ · все форматы ответа · 1585 заданий
Тип задачи: Написание программы.
| КЭС: | 3.2 Язык программирования (Python, C++, Паскаль, Java, C#, Школьный Алгоритмический Язык). Система программирования: редактор текста программ, транслятор, отладчик. Переменная: тип, имя, значение. Целые, вещественные и символьные переменные. Оператор присваивания. Арифметические выражения и порядок их вычисления. Операции с целыми числами: целочисленное деление, остаток от деления. Ветвления. Составные условия (запись логических выражений на изучаемом языке программирования). Нахождение минимума и максимума из двух, трёх и четырёх чисел. Решение квадратного уравнения, имеющего вещественные корни. Цикл с условием. Алгоритм Евклида для нахождения наибольшего общего делителя двух натуральных чисел. Разбиение записи натурального числа в позиционной системе с основанием, меньшим или равным 10, на отдельные цифры. Цикл с переменной. Алгоритмы проверки делимости одного целого числа на другое, проверки натурального числа на простоту |
| Тип ответа: | Развернутый ответ |
Ответ: Программа приведена в шаге 3
1. Разберём формат ввода.
Сначала читаем N — количество элементов или участников, затем обрабатываем ровно N записей. Первое число N не участвует в вычислении результата. Для каждой записи читаем одно число. Данные могут быть разделены переносами строк или пробелами: программа одинаково обрабатывает оба варианта.
2. Выберем алгоритм.
Последняя цифра в системе с основанием 7 равна остатку от деления модуля числа на 7. Требуемый остаток — 2. Используем равенство |x| = 7 · q + r, где 0 ≤ r ≤ 6. Поэтому весь перевод записи числа не нужен.
Счётчик count начинается с нуля. При каждом подходящем числе увеличиваем его на один. Одинаковые значения на разных местах последовательности считаются отдельными элементами.
Если подходящих элементов не оказалось, выводим строго 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) % 7 == 2:
count += 1
if count == 0:
print("NO")
else:
print(count)4. Проверка и обоснование.
Пример 1. Входные числа: 5 37 22 16 25 42.
Подходящие элементы: 37, 16. Их количество — 2.
Вывод: 2.
После каждой обработанной записи накопленные значения точно описывают уже просмотренную часть данных. На очередном шаге неподходящий элемент ничего не меняет, а подходящий учитывается один раз. После последней записи получаем результат для всей последовательности. Каждая запись обрабатывается один раз, поэтому время работы линейно по количеству записей. Алгоритму достаточно нескольких накопителей; приведённый способ чтения сохраняет входной текст, поэтому общая память программы линейна по размеру ввода.
Ответ: Программа приведена в шаге 3.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании OGEINF11484C.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.