Решение: Исправление программы поиска максимума
На обработку поступает последовательность из четырёх неотрицательных целых чисел, некоторые числа могут быть одинаковыми. Требуется вывести количество чисел, делящихся нацело на 3, и максимальное из таких чисел. Если таких чисел нет, необходимо вывести «NO». Вводимые числа не превышают 1000. Программист написал программу неправильно. Последовательно выполните три пункта: определите результат работы программы при вводе последовательности 2 9 4 3; приведите пример последовательности, содержащей хотя бы одно число, делящееся нацело на 3, для которой программа, несмотря на ошибку, выдаёт правильный ответ; найдите ошибки и исправьте их, изменяя только строки, в которых они находятся. Достаточно указать ошибки и исправления для одного языка программирования. В программе нужно исправить не более двух строк. Число 0 делится на любое натуральное число.
1n = 4 2count = 0 3maximum = 999 4for i in range(1, n+1): 5 x = int(input()) 6 if x % 3 == 0: 7 count += 1 8 if x < maximum: 9 maximum = x 10if count > 0: 11 print(count) 12 print(maximum) 13else: 14 print("NO")
Решение по шагам
6 шаговИз последовательности 2, 9, 4, 3 числа 9 и 3 делятся нацело на 3, поэтому количество таких чисел равно 2.
Переменная maximum изначально равна 999. После обработки числа 9 условие $9 < 999$ истинно, поэтому maximum становится равной 9. После обработки числа 3 условие $3 < 9$ также истинно, поэтому maximum становится равной 3.
Следовательно, программа выводит сначала 2, затем 3.
Пример последовательности, для которой ошибка не проявляется: 2 9 4 1. Единственное число, делящееся нацело на 3, — 9, поэтому программа выводит количество 1 и число 9, то есть правильный ответ.
Ошибка заключается в том, что программа выбирает минимальное делящееся на 3 число, а требуется максимальное. Необходимо изменить условие сравнения.
Исправленная строка:
$$if x > maximum:$$1) При вводе 2 9 4 3 программа выведет 2 и 3. 2) Например, последовательность 2 9 4 1: программа выведет 1 и 9, что является правильным ответом. 3) Ошибочная строка `if x < maximum:`; исправленная строка `if x > maximum:`.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Считать, что программа выводит максимальное число, не проследив изменение переменной maximum.
Назвать ошибкой начальное значение maximum = 999: оно корректно, поскольку максимальное число, делящееся на 3, среди чисел от 0 до 1000 равно 999.
Привести последовательность без чисел, делящихся на 3, хотя по условию такой пример должен содержать хотя бы одно такое число.
Изменить несколько строк или написать новую программу вместо исправления конкретной ошибочной строки.