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

Если нам известны цифры в разрядах сотен и тысяч, сколько существует палиндромов с этими зафиксированными цифрами? Правильно, ровно один. Значит, среди 90 сотен мы можем найти не более 90 палиндромов.
Какова разница между соседними палиндромами? Пусть c - количество сотен, m - количество тысяч (по одной цифре). Рассмотрим два случая: c = 9 и c < 9:
Теперь наша задача - найти первый палиндром, не меньший, чем a. Если запись цифр a = (mcdu), то ближайший следующий палиндром - это (mccm), если (cm) >= (du), а иначе - следующий по порядку палиндром, найденный прибавлением шага по принципу, описанному выше.
Теперь, когда мы построили математическую модель решения, можно её алгоритмизировать:
Какова разница между соседними палиндромами? Пусть 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
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)
print(*(i for i in range(int(input()), int(input())+1) if str(i) == str(i)[::-1]), sep='\n')
Похожие вопросы
- Товарищи. помогите пожалуйста с задачей по информатике
- Помогите, пожалуйста, решить задачу Python
- Помогите, пожалуйста, с задачей по информатике в питоне.
- Помогите пожалуйста решить задачу "Ход конём" в Python.
- Помогите пожалуйста решить задачу по программированию наpython.
- Помогите пожалуйста решить задачу на python
- Помогите пожалуйста решить задачи на питоне:
- Помогите пожалуйста решить задачу на питоне...
- Помогите поэтапно решить задачу из ЕГЭ по информатике. Нужно именно разобраться, как это решается и что в итоге выйдет
- Помогите мне пожалуйста решить задачу на питоне!