Решение: Исправление программы обработки цифр
На обработку поступает натуральное число, не превышающее $10^9$. Нужно написать программу, которая выводит на экран максимальную чётную цифру этого числа. Если в числе нет чётных цифр, требуется вывести «NO». Программист написал программу неправильно. Рассмотрите приведённую ниже программу на Python:
N = int(input())
maxDigit = N % 10
while N > 0:
digit = N % 10
if digit % 2 == 0:
if digit > maxDigit:
digit = maxDigit
N = N // 10
if maxDigit >= 0:
print(maxDigit)
else:
print("NO")
Последовательно выполните три пункта: определите результат работы программы при вводе числа 243; приведите пример трёхзначного числа, при вводе которого программа, несмотря на ошибки, выдаёт верный ответ; найдите две ошибки и исправьте их, изменяя только строки, в которых они допущены. Для каждой ошибки укажите исходную строку и правильный вариант строки.
Решение по шагам
6 шаговПри вводе числа 243 сначала выполняется присваивание maxDigit = 243 % 10, поэтому maxDigit получает значение 3.
Затем программа рассматривает цифры 3, 4 и 2. Для цифры 4 условие digit > maxDigit выполняется, но из-за ошибки присваивается digit = maxDigit. Значение maxDigit не изменяется и остаётся равным 3.
В конце проверка maxDigit >= 0 выполняется, поэтому программа выводит число 3.
Пример подходящего трёхзначного числа — 248. В нём максимальная чётная цифра равна 8, а последняя цифра также равна 8. Ошибочная программа сохраняет 8 и поэтому выдаёт правильный ответ.
Первая ошибка состоит в том, что начальное значение максимальной цифры берётся равным последней цифре числа. Нужно использовать значение, которое меньше любой цифры.
$$maxDigit = N \% 10 \longrightarrow maxDigit = -1$$Вторая ошибка состоит в обратном присваивании при нахождении большей цифры. Нужно заменить значение максимальной цифры найденной цифрой.
$$digit = maxDigit \longrightarrow maxDigit = digit$$Для 243 программа выводит 3. Пример трёхзначного числа: 248. Исправления: maxDigit = N % 10 заменить на maxDigit = -1; digit = maxDigit заменить на maxDigit = digit.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Указывать результат работы исправленной программы вместо результата исходной программы.
Менять условие digit > maxDigit вместо строки с присваиванием.
Исправлять только присваивание maxDigit = digit и забывать изменить начальное значение maxDigit.
Приводить число, у которого последняя цифра не совпадает с максимальной чётной цифрой.