Что проверяет задание
Задание 16 - программа обработки последовательности чисел. Программа читает числа (до числа 0 или заданное количество) и считает для чисел, подходящих под условие, сумму, количество, среднее, максимум или минимум. Если подходящих чисел нет, часто нужно вывести NO. Ответ - программа.
На сайте программу можно написать в Python IDLE на панели задания и нажать «Проверить решение»: она запустится на тестах.
Ввод последовательности
Последовательность заканчивается числом 0. Первое число читаем до цикла, следующее - в конце тела цикла. Ноль в обработку не попадает.
n = int(input())
while n != 0:
# обработка числа n
n = int(input())
Сначала вводится количество чисел. Читаем количество, затем цикл ровно на это количество.
k = int(input())
for i in range(k):
n = int(input())
# обработка числа n
Условие отбора
Частые условия:
- кратно 7:
n % 7 == 0; - кратно 6 или 11:
n % 6 == 0 or n % 11 == 0; - оканчивается на 4:
n % 10 == 4(для отрицательных чисел -abs(n) % 10 == 4); - чётное:
n % 2 == 0; - двузначное:
10 <= n <= 99(для целых чисел -10 <= abs(n) <= 99); - запись в системе с основанием p оканчивается цифрой d:
n % p == d; - запись в системе с основанием p оканчивается нечётной цифрой:
n % p % 2 == 1; - запись в шестнадцатеричной системе трёхзначна:
256 <= n <= 4095(от 100₁₆ до FFF₁₆).
Несколько условий одновременно соединяются через and.
Что накапливать
- сумма:
s = 0до цикла,s += nдля подходящего числа; - количество:
c = 0до цикла,c += 1; - среднее: копим и сумму, и количество, в конце
s / c(обычное деление/); - максимум и минимум: начинаем с
Noneили с первого подходящего числа.
Пример: среднее арифметическое чисел, кратных 8, или NO.
n = int(input())
s = 0
c = 0
while n != 0:
if n % 8 == 0:
s += n
c += 1
n = int(input())
if c == 0:
print("NO")
else:
print(s / c)
Максимум:
k = int(input())
m = None
for i in range(k):
n = int(input())
if n % 4 == 0:
if m is None or n > m:
m = n
print(m)
Разбор задачи из демоварианта
Задача. Напишите программу подсчёта количества элементов последовательности натуральных чисел, запись которых в восьмеричной системе счисления четырёхзначна и оканчивается на цифру 5. Программа получает на вход натуральные числа, количество чисел неизвестно, но не превышает 1000. Последовательность заканчивается числом 0 (0 - признак окончания ввода, не входит в последовательность). Программа должна напечатать одно число - количество искомых элементов.
Решение.
- Четырёхзначные восьмеричные числа - от 1000₈ до 7777₈, то есть от 8³ = 512 до 8⁴ - 1 = 4095.
- Последняя цифра восьмеричной записи - остаток от деления на 8. Оканчивается на 5 - значит,
n % 8 == 5. - Ввод до нуля: первое число читаем до цикла, следующее - в конце тела цикла. Счётчик
cувеличиваем для подходящих чисел.
c = 0
n = int(input())
while n != 0:
if 512 <= n <= 4095 and n % 8 == 5:
c += 1
n = int(input())
print(c)
Проверка на примере из условия (485, 557, 893, 3029, 4125, 0):
- 485 = 745₈ - трёхзначное, не подходит;
- 557 = 1055₈ - подходит;
- 893 = 1575₈ - подходит;
- 3029 = 5725₈ - подходит;
- 4125 больше 4095 - пятизначное, не подходит.
Программа выводит 3 - как в примере.
Типичные ошибки
- Новое число читается в начале цикла - первое число не обрабатывается.
range(k - 1)вместоrange(k)- пропущено последнее число.- Нет проверки, что подходящих чисел не было (нужно вывести NO).
- Минимум начинается с 0 - ни одно число его не «побьёт».
- Для среднего использовано
//вместо/. - Последняя цифра в системе с основанием p проверяется через
n % 10.
