Python

Добрый вечер, помогите, пожалуйста, решить задачу по информатике

Нужно написать код на python, с объяснением, пожалуйста
Shukhrat Ziyatov
Shukhrat Ziyatov
95
Если нам известны цифры в разрядах сотен и тысяч, сколько существует палиндромов с этими зафиксированными цифрами? Правильно, ровно один. Значит, среди 90 сотен мы можем найти не более 90 палиндромов.
Какова разница между соседними палиндромами? Пусть c - количество сотен, m - количество тысяч (по одной цифре). Рассмотрим два случая: c = 9 и c < 9:
 (mccm) = m ∙ 10³ + c ∙ 10² + c ∙ 10 + m
(mc) + 1 = (m(c+1)) при c < 9
или ((m+1)0) при c = 9
(m(c+1)(c+1)m) - (mccm) = 10² + 10 = 110 при c < 9
((m+1)00(m+1)) - (m99m) = 10³ + 1 - (9 + 1) ∙ (10² + 10) = 1001 - 9 ∙ 110 = 11
Т.е, начав с 1001, для получения следующих по порядку палиндромов мы должны 9 раз прибавить 110, и на 10-й раз (к 1991) прибавить 11 (получив 2002). Затем последовательность шагов повторяется. К 9999 мы уже ничего не прибавляем, это последнее число.

Теперь наша задача - найти первый палиндром, не меньший, чем a. Если запись цифр a = (mcdu), то ближайший следующий палиндром - это (mccm), если (cm) >= (du), а иначе - следующий по порядку палиндром, найденный прибавлением шага по принципу, описанному выше.

Теперь, когда мы построили математическую модель решения, можно её алгоритмизировать:
 a, b = max(1000, int(input())), min(9999, int(input()))
STEPS = [110] * 9 + [11]
mc, du = a // 100, a % 100
m, c = mc // 10, mc % 10
cm = c * 10 + m

p = a - du + cm + (0, STEPS[c])[cm < du]
while p
Абдикерим Тульбаев
Абдикерим Тульбаев
87 571
Лучший ответ
 def is_palindrome(n):
return str(n) == str(n)[::-1]

a = int(input())
b = int(input())

for i in range(a, b+1):
if is_palindrome(i):
print(i)
Dik* Iy
Dik* Iy
4 629
 print(*(i for i in range(int(input()), int(input())+1) if str(i) == str(i)[::-1]), sep='\n')