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