Решение: Исправление программы обработки цифр
На обработку поступает натуральное число, не превышающее $10^9$. Нужно написать программу, которая выводит сумму цифр числа, не кратных 3. Если в числе нет цифр, не кратных 3, требуется вывести «NO». Напоминание: 0 делится на любое натуральное число.
Программист написал программу неправильно. Рассмотрите приведённую ниже программу на Python.
Последовательно выполните следующие действия: вычислите результат работы программы при вводе числа 645; приведите пример трёхзначного числа, при вводе которого программа выдаёт верный ответ; найдите все ошибки в программе. Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки выпишите ошибочную строку и приведите её правильный вариант. Требуется найти ошибки в данной программе, а не написать другую программу с иным алгоритмом.
1N = int(input()) 2sum = N % 10 3while N > 0: 4 digit = N % 10 5 if digit % 3 > 0: 6 sum = digit 7 N = N // 10 8if sum > 0: 9 print(sum) 10else: 11 print("NO")
Решение по шагам
7 шаговПри вводе числа 645 цифры извлекаются справа налево: сначала 5, затем 4, затем 6.
Сначала выполняется `sum = N % 10`, поэтому sum получает значение 5. Цифра 5 не кратна 3, и затем sum снова получает значение 5.
Цифра 4 также не кратна 3, поэтому строка `sum = digit` заменяет значение 5 на 4. Цифра 6 кратна 3 и не изменяет sum.
В результате программа выводит 4.
Пример трёхзначного числа, для которого программа выдаёт верный ответ, — 300. Все его цифры кратны 3, поэтому правильный результат — `NO`, и программа также выводит `NO`.
Первая ошибка состоит в неправильной инициализации суммы: в сумму нельзя заранее записывать последнюю цифру числа, так как она может быть кратна 3. Сумму нужно начать с нуля.
Вторая ошибка состоит в присваивании значения очередной цифры вместо добавления её к накопленной сумме.
Для числа 645 программа выводит 4. Пример трёхзначного числа: 300. Ошибочные строки и исправления: `sum = N % 10` → `sum = 0`; `sum = digit` → `sum += digit`.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Указать правильную сумму цифр числа 645 — 9 — вместо результата работы ошибочной программы.
Исправить только строку `sum = digit`, не изменив начальное значение sum.
Считать ошибкой условие `digit % 3 > 0`: оно правильно проверяет, что цифра не кратна 3.
Привести число, для которого программа выдаёт неправильный ответ, вместо примера с верным ответом.