Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача из Яндекс учебника (ПОМОГИТЕ!)

Григорий Грушинский Ученик (109), закрыт 1 день назад
Вася ввёл код, но цифр в коде было меньше, чем «окошек» для них. Дверь не открылась. Кто-то за дверью тихо засмеялся (Васе показалось, что это девочка), прошуршал карандашом по бумаге и просунул под дверь записку. Там было сказано: «Сумма всех восьмизначных чисел-палиндромов».
Получается, в первый раз Вася услышал совсем не то! Или некто-по-ту-сторону решил над ним подшутить? Но выбираться-то нужно. Помоги Васе решить задачу, его уже давно ждут дома!
Лучший ответ
Артём Усанов Ученик (140) 2 недели назад
s=0
for i in range(1000,10000):
naoborot=""
for d in str(i):
naoborot= d + naoborot
s+= int(str(i)+naoborot)
print(s)
Остальные ответы
Андрей Высший разум (474952) 1 месяц назад
Задача решается БЕЗ программирования.

Если эти восьмизначные числа могут иметь ведущий ноль, то ответ элементарен: сумма арифметической прогрессии чисел от 0 до 9999, умноженная на 10001 (и левые 4 цифры, и правые 4 цифры составляют числа от 0000 до 9999 включительно):
 10000 * (0 + 9999) // 2 * 10001 

Если эти числа ведущего нуля не имеют, вычисления чуть сложнее:
левые 4 цифры составляют числа от 1000 до 9999 и сумма этих частей равна:
 9000 * (1000 + 9999) // 2 * 10000 
Но правые 4 цифры составляют числа от 0001 до 9999 исключая все числа вида XXX0. Эту сумму проще всего просчитать как разность двух арифметических прогрессий:
 10000 * (0 + 9999) // 2 - 1000 * (0 + 9990) // 2 
И ответ равен:
 9000 * (1000 + 9999) // 2 * 10000 + 10000 * (0 + 9999) // 2 - 1000 * (0 + 9990) // 2 

Но если тебе так хочется писать код, то для случая с ведущим нулём:
 s = 0
for i in range(10000):
v = '%2504d' % i
s += int(v + v[::-1])
print(s)
И для случая без ведущего нуля:
 s = 0
for i in range(1000, 10000):
v = '%2504d' % i
s += int(v + v[::-1])
print(s)
Похожие вопросы