Задача на подсчет количества палиндромов
Условие задачи: "Назовем число палиндромом, если оно не меняется при перестановке его цифр в обратном порядке. Напишите программу, которая по заданному числу K выводит количество натуральных палиндромов, не превосходящих K."
Вот как выглядит моё решение:
K = int(input())
countNumber = 0
a = 0
flip = 0
Number = 0
countFlip = 0
while countNumber <= K:
countNumber += 1
Number = countNumber
while Number > 0:
a = Number % 10
Number = Number // 10
flip = flip * 10 + a
if countNumber == flip:
countFlip += 1
print(countFlip)
По моей логике код должен работать следующим образом:
- Вводятся числа K, счетчик, который завершит работу цикла; переменные a, Number и flip для "переворота" числа; и счетчик countFlip для подсчета палиндромов.
- счетчик countNumber будет увеличиваться до тех пор, пока не будет равен K;
- каждое увеличение счетчика будет приравниваться переменной Number для вычисления самого "перевёртыша" во вложенном цикле.
- В случае, если "перевёртыш" является палиндромом, cчетчик countFlip увеличивается.
При запуске программы, что бы я не вводил, программа выдаёт "1". Почему?
Заранее благодарю за помощь!
Ответы (1 шт):
Наверное потому, что flip надо инициализировать там же где Number - перед циклом проверки:
K = int(input())
countNumber = 0
countFlip = 0
for countNumber in range(1, K+1):
Number = countNumber
flip = 0 # нужно инициализировать здесь
while Number > 0:
flip = flip * 10 + Number % 10
Number = Number // 10
if countNumber == flip:
countFlip += 1
print(countFlip)
У вас просто переменная flip не сбрасывалась, а копилась дальше и, естественно, она уже не проходила проверку на равенство countNumber на итерациях дальше первой.
P.S. Я ещё немного код сократил, а то были и лишние переменные и лишняя инициализация, и цикл можно же короче написать.