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