Присоединиться

Информатика·Алгоритмы и программирование·9–11 класс

Что выведет программа: сумма нечётных цифр числа 58371 (цикл while)

Условие

Дана программа на языке Python. Сначала задаются значения n = 58371, s = 0, k = 0. Затем выполняется цикл while n > 0: с телом из трёх действий: d = n % 10, потом if d % 2 == 1: s = s + d; k = k + 1, потом n = n // 10. После завершения цикла выполняется команда print(s, k). Определите, какие два числа будут выведены на экран, и объясните, что именно вычисляет эта программа.

Ответ

16 4 (сумма нечётных цифр равна 16, таких цифр 4)

Решение по шагам

  1. Шаг 1. Разбираемся, что делают операции % и //

    Обе операции работают только с целыми числами.

    • Остаток от деления на 10 — это последняя цифра числа: 58371 % 10 даёт 11.
    • Целочисленное деление на 10 «отрезает» последнюю цифру: 58371 // 10 даёт 58375837.

    Значит, тело цикла на каждом витке достаёт очередную цифру справа и укорачивает число на один разряд. Цикл while n > 0 остановится тогда, когда от числа ничего не останется, то есть когда n станет равно 00.

    Условие d % 2 == 1 истинно ровно для нечётных цифр: 1,3,5,7,91, 3, 5, 7, 9. Итого переменная s копит сумму нечётных цифр, а k считает, сколько их.

  2. Шаг 2. Заводим таблицу трассировки и проходим первые два витка

    Трассировка — это таблица, в которой для каждого витка цикла выписаны все переменные. Заполним первые две строки.

    Витокn до виткаdНечётная?s послеk послеn после
    1583711да115837
    258377да82583

    Обратите внимание на порядок команд: сначала цифра извлекается и обрабатывается, и только потом число делится нацело. Если поменять эти строки местами, последняя цифра потеряется.

Осталось ещё 2 шага — откроются после входа:

  • Шаг 3. Доводим трассировку до конца
  • Шаг 4. Проверяем результат прямым счётом
Получить полное решение

Бесплатно · займёт минуту

Частые ошибки

  • Путают % и //: берут n % 10 за «число без последней цифры», а n // 10 — за саму цифру.

  • Проверяют чётность номера разряда, а не самой цифры: в переменной d лежит именно цифра, поэтому восьмёрка не подходит независимо от того, на каком месте в записи числа она стоит.

  • Используют n / 10 вместо n // 10: получается вещественное число, n никогда не станет ровно нулём и цикл не завершится корректно.

  • Выводят только сумму 16, забывая про второе значение k, хотя print(s, k) печатает два числа.

Другие задачи по теме «Алгоритмы и программирование»