Решение: Поиск ошибок в программе
На обработку поступает натуральное число, не превышающее $10^9$. Программа должна вывести максимальную цифру числа, кратную 3. Если цифр, кратных 3, в числе нет, требуется вывести «NO». Известно, что 0 делится на любое натуральное число. Программист написал программу неправильно; приведены варианты программы на нескольких языках программирования.
Последовательно выполните следующие действия: 1) определите, что выведет программа при вводе числа 105; 2) приведите пример трёхзначного числа, при вводе которого программа выдаёт верный ответ; 3) найдите все ошибки в программе. Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки укажите ошибочную строку и её правильный вариант. Достаточно указать ошибки и исправления для одного языка программирования. Требуется исправлять имеющуюся программу, не заменяя её другим алгоритмом.
Решение по шагам
5 шаговПри вводе 105 программа последовательно рассматривает цифры 5, 0 и 1. Цифра 0 кратна 3, но переменная maxDigit изначально равна 0, поэтому условие digit > maxDigit для цифры 0 ложно.
После обработки всех цифр значение maxDigit остаётся равным 0. Проверка maxDigit > 0 также ложна, поэтому программа выводит NO.
Пример трёхзначного числа, для которого программа выдаёт верный ответ, — 123. Среди его цифр 1, 2 и 3 максимальная цифра, кратная 3, равна 3, и программа выводит 3.
Ошибка 1: начальное значение maxDigit равно 0. Из-за этого цифра 0 не может быть записана в переменную как найденная подходящая цифра. В Python правильная строка: maxDigit = -1.
Ошибка 2: проверка maxDigit > 0 не позволяет вывести найденную цифру 0. После начальной инициализации значением -1 правильная строка в Python: if maxDigit >= 0:.
1) При вводе 105 программа выводит NO. 2) Например, при вводе 123 программа выводит 3. 3) В Python нужно заменить maxDigit = 0 на maxDigit = -1 и if maxDigit > 0: на if maxDigit >= 0:.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Считать, что программа при вводе 105 выводит 0, хотя условие maxDigit > 0 приводит к выводу NO.
Исправить только условие вывода, не изменив начальное значение maxDigit.
Предложить новый алгоритм вместо исправления конкретных строк исходной программы.
Не учитывать цифру 0 как цифру, кратную 3.