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

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

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

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

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

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

Напишите программу, которая в последовательности натуральных чисел находит среднее арифметическое чисел, кратных 8, или сообщает, что таких чисел нет (выводит «NO»). Программа получает на вход натуральные числа, количество введённых чисел неизвестно, последовательность чисел заканчивается числом 0 (0 –  признак окончания ввода, не входит в последовательность).

Количество чисел не превышает 100. Введённые числа не превышают 300.

Программа должна вывести среднее арифметическое чисел, кратных 8, или вывести «NO», если таких чисел нет. Значение выводить с точностью до десятых.

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

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

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

8

122

64

16

0

29.3

111

1

0

NO

 


 

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

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

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

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

2. Выберем алгоритм.
Число кратно 8, когда остаток от деления на 8 равен нулю. В Python остаток вычисляет оператор %. Это правило верно и для отрицательных целых чисел.
Считаем количество подходящих чисел count и их сумму total. Среднее равно totalcount; деление выполняем только при положительном count. В программе truediv(total, count) вычисляет обычное деление с вещественным результатом.
Если подходящих элементов не оказалось, выводим строго NO. Даже когда найденная сумма или среднее равны нулю, при наличии элементов нужно вывести число, а не NO.
По условию результат требуется с точностью до десятых. Формат .1f оставляет ровно один знак после десятичной точки; округляем только при выводе.

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

import sys
from operator import truediv

data = iter(map(int, sys.stdin.buffer.read().split()))
count = 0
total = 0
best = None
for x in data:
    if x == 0:
        break
    if (x % 8 == 0):
        count += 1
        total += x
if count == 0:
    print("NO")
else:
    print(format(truediv(total, count), ".1f"))

4. Проверка и обоснование.
Пример 1. Входные числа: 8 122 64 16 0.
Подходящие элементы: 8, 64, 16. Их количество — 3. Сумма: 8 + 64 + 16 = 88.
Вывод: 29.3.
Пример 2. Входные числа: 111 1 0.
Подходящие элементы: отсутствуют.
Вывод: NO.
После каждой обработанной записи накопленные значения точно описывают уже просмотренную часть данных. На очередном шаге неподходящий элемент ничего не меняет, а подходящий учитывается один раз. После последней записи получаем результат для всей последовательности. Каждая запись обрабатывается один раз, поэтому время работы линейно по количеству записей. Алгоритму достаточно нескольких накопителей; приведённый способ чтения сохраняет входной текст, поэтому общая память программы линейна по размеру ввода.

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

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

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

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

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

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

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

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