Ваша программа проходит оба примера. Вы отправляете её — Wrong answer on test 7. Примеры пишут, чтобы объяснить условие, а не чтобы проверить все его тонкие места; скрытые тесты пишут, чтобы ломать программы. Этот урок о том, как сломать свою программу первым: знать, где прячутся ошибки, проверять вручную и поручить проверку компьютеру.
Типичные ловушки
Большинство неправильных ответов у программ, которые выглядят правильными, берутся из короткого списка. Перед отправкой пройдитесь по нему, держа перед глазами ограничения задачи:
Проверяйте вручную на крошечных тестах
Для каждой подходящей ловушки придумайте тест, который можно решить на бумаге. Найдите ответ до запуска программы и только потом сравнивайте. Обычно хватает трёх чисел, а крошечный тест легко читать, когда что-то идёт не так.
Вот программа, которая печатает наибольшее из n чисел. Она проходит любой пример, в котором есть положительное число. Проверьте на ней ловушку «отрицательные числа» — три отрицательных:
Исправление — начинать со значения, которое действительно есть во входных данных,
int best = a[0];, или с чего-то меньшего, чем любое допустимое значение.
Теперь поохотьтесь на ошибки сами. Каждая программа ниже проходит свой пример; соберите входные данные, на которых она напечатает неправильный ответ: