Решение задач ОГЭ по информатике с развернутым ответом двумя способами: при помощи циклов for и при помощи циклов while. Нахождение минимума и максимума в последовательности чисел. Условия.
Автор: Анна Михайлова
О чём это видео
Оглавление конспекта
Поиск минимального числа, делящегося на 7
Здравствуйте! В этом видео я бы хотела с вами разобрать такую тему, как минимум и максимум в каком-то порядке чисел. Мы с вами разберем на примере данной программы из тренировочного ОГЭ. Нам необходимо написать программу, которая в последовательности натуральных чисел будет определять минимальное число, которое делится нацело на 7.
Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, делящееся на 7. То есть мы знаем, что в нашей последовательности точно будет число, делящееся на 7, и наш минимум точно будет не нулевым, и он точно изменится. Количество чисел не превышает 1000, а введенные числа не превышают 30 000.
На самом деле эти ограничения вам нужны именно для того, чтобы определить минимум, максимум или другие какие-то стартовые значения. Обычно количество никак не ограничивается, и прописывание условия для количества не обязательно. А вот с минимумом немножечко хитрее. Я покажу вам два способа разбора: через цикл FOR и через цикл WHILE. То есть два способа написания кода для данной программы.
Первый способ: использование цикла FOR
Сначала запишем переменную, которая будет обозначать количество чисел. Пишем, что col будет вводиться у нас с клавиатуры — это будет целое число. Далее нам нужно задать планку минимального числа. Нам необходимо задать такое число, которое 100% будет больше, чем любое из нашей последовательности. В данном случае максимальное число в последовательности — это 30 000. Значит, тот минимум, который нам подойдет, это, например, 30 000 – 1. Нам нужно настолько задать планку этого значения, чтобы любое число из нашей последовательности, которое мы введем, подходило бы нам по условию.
Далее давайте первый способ, который мы опишем через цикл for. Нам надо изменять значение от 0 до этого количества. То есть, если мы вводим 4, то значение должно измениться от 0 до 4, то есть посчитаться 4 раза. Мы можем написать таким способом: for i in range(col). Это будет обозначать, что мы изменяем переменную i в промежутке от 0 до значения, которое будет лежать в переменной col.
После этого нам нужно вводить числа. Мы получили количество, теперь должны ввести сами числа в нашу последовательность. Записываем это при помощи переменной num = int(input()). Таким образом, на каждом шагу, когда у нас будет меняться переменная i, мы будем вводить новое число.
После этого нам необходимо проверить это число на условия. Число должно делиться нацело на 7 — это наше первое условие. Оно описывается при помощи конструкции if. Если наше число делится нацело на 7 без остатка (то есть остаток деления будет равен 0), мы его сравниваем. Второе условие, которое должно выполняться одновременно с первым, — это наше число должно быть меньше, чем минимум. Так как нам нужно найти минимальное значение, то каждое последующее число, которое мы вводим, если оно подходит под первое условие и если оно меньше, чем предыдущее, то мы сделаем его минимумом. Мы пишем, что оно должно быть меньше, чем минимум, и после этого говорим, что в минимум положим новое значение нашего числа на этом шагу. И последнее действие — напечатать наш минимум.
Давайте проверим, как это работает. Мы вводим входные данные: сначала количество, далее сами цифры: 4, 100, 4, 490. Видите, у нас получилось корректное значение, то есть 490 — это минимальное число, которое делится на 7 в данной последовательности.
Второй способ: использование цикла WHILE
Давайте сейчас этот способ закомментируем и напишем второй способ решения этой задачи через цикл while. Для того чтобы решить наше задание с циклом while, нам необходимо иметь еще одну переменную, которая является счетчиком или итератором, и она равняется 0. Пока эта наша переменная i будет меньше, чем количество, нам нужно будет делать всё то же самое: вводить число, проверять, делится оно на 7 и меньше ли оно минимума. В конце мы точно так же должны вывести print(min).
Давайте посмотрим, что будет, если мы напишем вот таким же образом. Запустим наш код. Этот код не выполняется, так как он закомментирован, поэтому компилятор его игнорирует. Давайте напишем те же самые входные данные: 4, 100, 4, 490. Видите, программа не прекращает свою работу. А всё почему? Она у нас зациклена. Наше условие, которое мы написали в while, выполняется всегда. То есть у нас переменная i всегда меньше количества, потому что мы её не изменяем.
Для того чтобы этот цикл сработал нужное нам количество раз, нам нужно эту переменную изменять — на каждом шагу прибавлять единичку. Давайте попробуем теперь запустить: 4, 111, 100, 4, 490. Видите, верный ответ нам дала наша программа. Это второй способ для решения такой задачи.
Новая задача: поиск максимума
Давайте попробуем решить следующую задачу. Нам нужно написать программу, которая в последовательности чисел определяет максимальное число, которое оканчивается на цифру 8. Здесь есть два отличия. Первое — это у нас должна быть не кратность, а именно последняя цифра, равная 8. И число должно быть максимальным. Точно так же, как и в предыдущей задаче, мы сначала вводим количество. Значение будет с клавиатуры.
Условия задачи и логика поиска
Здесь есть два отличия. Первое — у нас должно быть не кратное, а именно последнее значение. То есть эта последняя цифра равна 8, и число должно быть максимальным. Точно так же, как и в предыдущей задаче, мы с вами вводим сначала количество. С клавиатуры вводится значение количества, а второе — это будет максимум.
Если в предыдущей задаче мы с вами минимум делали максимальным числом, чтобы у нас точно встретилось в последовательности число меньше, чем минимум, то здесь у нас должен быть такой максимум, который будет гарантированно меньше, чем число из последовательности. То есть мы берем максимум, равный 0.
Алгоритм проверки условий
Далее мы пишем, как в предыдущей задаче, что у нас переменная $i$ изменяется до значения «количество». На каждом шаге мы вводим число. После того как мы ввели число, нам нужно проверить два условия. С первым условием, я думаю, всё будет понятно: нужно, чтобы наше число было больше, чем наш максимум. То есть если у нас будет, допустим, значение просто 8, то тогда 8 будет 100% больше, и оно станет максимумом.
Кроме этого, нам нужно найти число, которое будет оканчиваться на 8. Чтобы это сделать, нам нужно отсечь последнее значение. Чтобы его отсечь, нам надо разделить число на 10. Остаток деления на 10 мы должны сравнить с восьмёркой. И тогда мы пишем: максимум равняется нашему нынешнему значению.
Давайте выведем на экран и проверим по примеру: 81, 80, 108. Да, действительно, видите, мы нашли, что наше самое большое число 138, и оно действительно оканчивается на восьмёрку. Значит, мы решили задачу верно.
Реализация через цикл while
Точно так же всё это можно написать при помощи цикла while. То есть, если мы пишем while и условие «меньше, чем количество», не забудьте только, что у вас тогда должна быть переменная $i$, объявленная изначально. И она обязательно должна в цикле изменяться.
Заметьте, она у вас будет именно в цикле. То есть то, что с одним отступом — нет, а с двумя отступами — это касается нашего условия if. Давайте проверим с теми же входными значениями. Да, действительно, всё верно срабатывало.
Полезные советы при решении задач
Вот такого типа задачи у вас могут быть: первое — это максимум, второе — минимум. Прошу вас вспомнить, что отсечение последней цифры — это остаток деления на 10. Если вам нужно найти число, которое будет кратно чему-то, то нужно поделить на это число и сравнить остаток деления с нулём.
Пожалуйста, проверяйте все входные данные самостоятельно. При решении задач вы можете выбрать любой способ, который вам больше понравился: либо через цикл while, либо цикл for.