Найти в Дзене

Как решать задачи на поиск суммы "красивых" чисел

В интернете есть довольно много вопросов на эту тему, что обусловленно популярностью данной задачи для учащихся 8-9 классов в 2015-2016 годах. Задача звучит, обычно, следующим образом: Назовём красивыми числа, в записи которых есть цифры, отличающиеся друг от друга ровно на единицу (например: 12, 965, 3148).
Сумма красивых чисел, меньших 30, равна 66 (10 + 12 + 21 + 23 = 66).
Найдите сумму красивых натуральных чисел, меньших 10000. Условие "красоты" числа может незначительно меняться, например, таким могу назвать число с двумя одинаковыми числами, сути задачи это не меняет. Что хотят проверить Вопрос задают в рамках предмета информатика, и просят написать программу на любом языке программирования. Все эти признаки заставляют думать, что от обучающегося ожидают программу или скрипт, который сможет перебрать все значения, использует условия и накопит сумму искомых чисел, которая в итоге и окажется ответом. Подробнее о решении Сначала определим две переменные, которые упростят нам раб
Оглавление

В интернете есть довольно много вопросов на эту тему, что обусловленно популярностью данной задачи для учащихся 8-9 классов в 2015-2016 годах. Задача звучит, обычно, следующим образом:

Назовём красивыми числа, в записи которых есть цифры, отличающиеся друг от друга ровно на единицу (например: 12, 965, 3148).

Сумма красивых чисел, меньших 30, равна 66 (10 + 12 + 21 + 23 = 66).

Найдите сумму красивых натуральных чисел, меньших 10000.

Условие "красоты" числа может незначительно меняться, например, таким могу назвать число с двумя одинаковыми числами, сути задачи это не меняет.

Что хотят проверить

Вопрос задают в рамках предмета информатика, и просят написать программу на любом языке программирования. Все эти признаки заставляют думать, что от обучающегося ожидают программу или скрипт, который сможет перебрать все значения, использует условия и накопит сумму искомых чисел, которая в итоге и окажется ответом.

Подробнее о решении

Сначала определим две переменные, которые упростят нам работу над задачей. Одна из которых будет обозначать лимит до которого нужно искать сумму (в нашем случае 10000), а вторая будет накапливать сумму "красивых" чисел и иметь значение в начале работы равное нулю (этот и далее написанный код написан на языке программирования Python).

LIMIT = 10000
result_sum = 0


Далее идёт самая сложная часть программы - реализация метода, определяющего свойство числа. При различных условиях для данной задачи будет меняться только этот метод, весь остальной код останется без изменений. Простая реализация для условия из статьи

def _is_beautiful_number(num: int) -> bool:
for i in str(num):
for j in str(num):
if abs(int(i) - int(j)) == 1:
return True


Остальное дело техники, так как все что нужно для работы есть и требуется только посчитать сумму, что современные компьютеры делают крайне быстро

if __name__ == '__main__':
for i in range(1, LIMIT+1):
if _is_beautiful_number(i):
result_sum += i

print(result_sum)

Если Вы тоже используете язык программирования Python, не забудьте написать if __name__ == '__main__', чтобы если решиться воспользоваться этим кодом в другом файле, при импорте он не выполнялся каждый раз.

Вот и все решение, достаточно выполнить код для получения ответа.

Важный нюанс про тестирование

При программировании даже крайне простой задачи, никогда не стоит пренебрегать тестированием. Ошибка может закрасться в любом месте. В условии задачи есть пример правильного решения для чисел меньше 30. Для проверки можно заменить значение одной из наших переменных на 30

LIMIT = 30

и запустить скрипт ещё раз