Сделайте ошибку наблюдаемой
Сохраните три значения: вход, ожидаемый результат, фактический результат. Если программа падает, сохраните также сообщение ошибки. Повторяемый пример полезнее описания «иногда не работает».Уменьшайте вход, пока неверное поведение сохраняется. Если ошибка связана с концом диапазона, часто достаточно n = 1. Для индексов массива проверьте один элемент и пустой массив, если он разрешён. Для сравнения чисел — равенство и отрицательные значения.
Ручная трассировка
Запишите состояния переменных по шагам. В сумме 1 + 2 + 3 накопитель меняется 0 → 1 → 3 → 6. В Pythonrange(1, n) не включает n; правильный диапазон для этой суммы — range(1, n + 1). В C++ условие i <= n включает последнюю границу.
Сначала проверьте чтение и вывод, затем границы, порядок обновления и типы. Объясните, почему исправление работает для всех допустимых значений, а не только для найденного теста. Добавьте этот тест в постоянную проверку, чтобы ошибка не вернулась.
Отладочный вывод
В локальном проекте можно временно печатать промежуточные состояния в stderr. Для отправки оставьте в stdout только требуемый ответ. В C++ проверки границ черезvector.at и инструменты диагностики помогают найти неверный индекс; при переходе к быстрому доступу всё равно необходимо обоснование границ.
Если исправление меняет алгоритм, повторно оцените время и память. Иногда проверка ошибки показывает, что сам выбранный подход неприменим к ограничениям.