ФИПИ · ОГЭ · все форматы ответа · 1585 заданий
Тип задачи: Написание программы.
| КЭС: | 3.2 Язык программирования (Python, C++, Паскаль, Java, C#, Школьный Алгоритмический Язык). Система программирования: редактор текста программ, транслятор, отладчик. Переменная: тип, имя, значение. Целые, вещественные и символьные переменные. Оператор присваивания. Арифметические выражения и порядок их вычисления. Операции с целыми числами: целочисленное деление, остаток от деления. Ветвления. Составные условия (запись логических выражений на изучаемом языке программирования). Нахождение минимума и максимума из двух, трёх и четырёх чисел. Решение квадратного уравнения, имеющего вещественные корни. Цикл с условием. Алгоритм Евклида для нахождения наибольшего общего делителя двух натуральных чисел. Разбиение записи натурального числа в позиционной системе с основанием, меньшим или равным 10, на отдельные цифры. Цикл с переменной. Алгоритмы проверки делимости одного целого числа на другое, проверки натурального числа на простоту |
| Тип ответа: | Развернутый ответ |
Ответ: Программа приведена в шаге 3
1. Разберём формат ввода.
Ввод содержит сами числа, а не их количество. Считываем очередное число и прежде всего проверяем, равно ли оно нулю. При нуле завершаем обработку: этот признак окончания не входит в последовательность и не должен влиять на сумму, количество, среднее или экстремум.
2. Выберем алгоритм.
Количество цифр в записи по основанию 16 должно быть равно 3. Это равносильно границам 16² ≤ x ≤ 16³ − 1, то есть 256 ≤ x ≤ 4095. Левый конец включён, следующее значение 4096 уже имеет больше цифр.
Цифра F имеет десятичное значение 15. Последняя цифра в системе с основанием 16 равна остатку от деления модуля числа на 16. Требуемый остаток — 15. Используем равенство |x| = 16 · q + r, где 0 ≤ r ≤ 15. Поэтому весь перевод записи числа не нужен.
Все перечисленные требования должны выполняться одновременно, поэтому соединяем проверки оператором and.
Счётчик count начинается с нуля. При каждом подходящем числе увеличиваем его на один. Одинаковые значения на разных местах последовательности считаются отдельными элементами.
Если подходящих чисел нет, счётчик или сумма остаются равны нулю; программа выводит 0.
3. Программа на Python 3.
import sys
data = iter(map(int, sys.stdin.buffer.read().split()))
count = 0
total = 0
best = None
for x in data:
if x == 0:
break
if 256 <= x < 4096 and abs(x) % 16 == 15:
count += 1
print(count)4. Проверка и обоснование.
Пример 1. Входные числа: 175 287 895 959 4127 0.
Подходящие элементы: 287, 895, 959. Их количество — 3.
Вывод: 3.
После каждой обработанной записи накопленные значения точно описывают уже просмотренную часть данных. На очередном шаге неподходящий элемент ничего не меняет, а подходящий учитывается один раз. После последней записи получаем результат для всей последовательности. Каждая запись обрабатывается один раз, поэтому время работы линейно по количеству записей. Алгоритму достаточно нескольких накопителей; приведённый способ чтения сохраняет входной текст, поэтому общая память программы линейна по размеру ввода.
Ответ: Программа приведена в шаге 3.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании OGEINFC5D2E6.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.