пятница, 23 мая 2025 г.

Задание 16 (ОГЭ, информатика)

Внимание! Чтобы развернуть статью целиком жмите по ссылке Далее внизу поста.

Если нужен ролик, то пишите в Сферум, а пока выкладываю текстовое объяснение.

У вас на экзамене будет редактор Geany. Его особенность в том, что программу не запустить, пока не сохранишь. Но сохранять нужно, добавляя в конец имени файла .py (например, задача.py)

Любое задание этого типа состоит из трех частей:

  1. ввод чисел;
  2. фильтрация чисел;
  3. ответ на вопрос.

1. Ввод чисел (два случая)

В первом, сначала вводится количество чисел, а потом сами числа. Например, в этой задаче.

Напишите программу, которая в последовательности натуральных чисел определяет максимальное число, кратное 5. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, кратное 5. Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число  — максимальное число, кратное 5.

В этом случае, используется цикл for:

n = int(input())
for i in range(n):
    a = int(input())

В первой строчке в переменную n вводится количество чисел. Во второй, запускается цикл, который повторяется n раз. В третьей (которая внутри цикла), в переменную a последовательно вводятся числа из последовательности.

Во втором случае, сначала вводится последовательность чисел, пока пользователь не введет команду остановки ввода (чаще всего, 0). Например.

Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает на вход натуральные числа, количество введенных чисел неизвестно, последовательность чисел заканчивается числом 0 (0  — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число: сумму всех чисел, кратных 6 и оканчивающихся на 4.

В этом случае используется цикл while:

a = int(input())
while a != 0:
    a = int(input())

 В первой строчке в переменную a вводится первое число последовательности. Во второй, запускается цикл, который повторяется неопределенное количество раз, пока в переменной а не запишут число 0. В третьей строчке (внутри цикла) в переменную a последовательно вводятся оставшиеся числа из последовательности.

2. Фильтрация чисел

В том же цикле, что написали в первом пункте, нужно отбросить все числа, которые ненужны для ответа на вопрос задачи. Это делается с  помощью условия if. Все нужные числа записываем в заранее созданный список. Например, для первой задачи.

Напишите программу, которая в последовательности натуральных чисел определяет максимальное число, кратное 5. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, кратное 5. Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число  — максимальное число, кратное 5.

 Все добавленные строчки окрашены в красный.

s = []
n = int(input())
for i in range(n):
    a = int(input())
    if a % 5 == 0:
        s.append(a)

В первой строчке создан пустой список s. Внутри цикла добавлено условие, которое выполняется, если остаток от деления на 5 числа в переменной а равняется нулю (иными словами, число кратно 5). Если условие выполнилось, то число из переменной а добавляется в список s

Рассмотрим вторую задачу.

Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает на вход натуральные числа, количество введенных чисел неизвестно, последовательность чисел заканчивается числом 0 (0  — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число: сумму всех чисел, кратных 6 и оканчивающихся на 4.

 Все добавленные строчки окрашены в красный.

s = []
a = int(input())
while a != 0:
    if a % 6 == 0 and a % 10 == 4:
        s.append(a)

    a = int(input())

В первой строчке создан пустой список s. Внутри цикла добавлено условие, которое выполняется, если остаток от деления на 6 числа в переменной а равняется нулю (иными словами, число кратно 6) и остаток деления числа на 10 равняется 4 (оканчивается на 4). Связка and означает, что условия должны выполняться одновременно. Если условие выполнилось, то число из переменной а добавляется в список s.

Обратите внимание, что в цикле while сначала отсеивается ранее введенное число и только потом запрашивается следующее, а в for сразу вводится число и проходит отсев в одном витке цикла.

В результате получается список заполненный только нужными числами.

Часто встречающиеся условия:

  • a % 7 == 0 - число кратно 7 (если a % 2 == 0 - число четное)
  • a % 10 == 7 - число оканчивается на 7 (a % 100 == 47 - число оканчивается на 47)
  • a > 0 - положительное число (a >= 0 - неотрицательное число)
  • 9 < a < 100 - двузначное число (99 < a < 1000 - трехзначное число)

3. Ответ на вопрос

Ответ выводится с помощью одной из функций списка через print

Напишите программу, которая в последовательности натуральных чисел определяет максимальное число, кратное 5. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, кратное 5. Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число  — максимальное число, кратное 5.

s = []
n = int(input())
for i in range(n):
    a = int(input())
    if a % 5 == 0:
        s.append(a)
print(max(s))

Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает на вход натуральные числа, количество введенных чисел неизвестно, последовательность чисел заканчивается числом 0 (0  — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число: сумму всех чисел, кратных 6 и оканчивающихся на 4.

s = []
a = int(input())
while a != 0:
    if a % 6 == 0 and a % 10 == 4:
        s.append(a)
    a = int(input())
print(sum(s))

Часто используемые для ответа функции списка:

  • len(s) - количество элементов списка
  • sum(s) - сумма элементов списка
  • min(s) - минимальный элемент списка
  • max(s) - максимальный элемент списка 

Особые случаи

Иногда попадаются задачи, в которых нужно выполнить чуть больше этапов. Рассмотрим парочку таких примеров. 

Напишите программу для решения следующей задачи. Камера наблюдения регистрирует в автоматическом режиме скорость проезжающих мимо нее автомобилей, округляя значения скорости до целых чисел. Необходимо определить максимальную зарегистрированную скорость автомобиля. Если скорость хотя бы одного автомобиля была меньше 30 км/ч, выведите «YES», иначе выведите «N0».

Программа получает на вход число проехавших автомобилей N (1 < N < 30), затем указываются их скорости. Значение скорости не может быть меньше 1 и больше 300.Программа должна сначала вывести максимальную скорость, затем YES или NO.

В этой задаче нет фильтрации (в список записываем все числа), но зато числа нужно округлять и ответить на дополнительный вопрос.

s = []
n = int(input())
for i in range(n):
    a = round(float(input())):
    s.append(a)
print(sum(s))
if min(s) < 30:
    print('YES')
else:
    print('NO')
В четвертой строке используется float() вместо int() потому что int() отбрасывает дробную часть у чисел и нам не получится правильно их округлить. Так же, в этой строчке есть функция round(), она округляет так, как нас учили на математике, до целых чисел.

В конце программы if, для ответа на дополнительный вопрос. Так как нам нужно узнать, есть ли среди скоростей меньше 30, то логично сравнить с 30 минимальную скорость в списке.

Напишите программу, которая в последовательности целых чисел определяет сумму двух наибольших и сумму двух наименьших. Программа должна вывести две этих суммы в указанном порядке. Программа получает на вход целые числа, количество введенных чисел не известно, последовательность чисел заканчивается числом 0 (0  — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введенные числа по модулю не превышают 30 000.

В последовательности не менее двух чисел.

В этой задаче тоже нет необходимости отсеивать числа, зато нужно найти ДВА минимальных и ДВА максимальных элемента. Тут min() и max() не помогут. Воспользуемся функцией sorted() Она сортирует элементы списка по возрастанию, тогда два первых элемента будут минимальными, а два последних максимальными.

s = []
a = int(input())
while a != 0:
    s.append(a)
    a = int(input())
sorted(s)
print(s[-1] + s[-2])
print(s[0] + s[1])

Напомню, что у каждого элемента есть свой номер и нумерация начинается с 0. Так же, можно нумеровать элементы с конца, тогда у последнего будет номер -1, у предпоследнего -2 и так далее.

Если остались вопросы, то пишите в сферум и/или освежите свою память по спискам вот тут.

 

Комментариев нет:

Отправить комментарий