Натуральное число называется палиндромом, если его запись в десятичной системе счисления читается слева направо также, как и справа налево. По данному натуральному числу N определите следующее за ним натуральное число (то есть наименьшее число, которое превосходит N), являющееся палиндромом.
Формат входного файла
Программа получает на вход одно натуральное число N, состоящее не более чем из 200 цифр.
Формат выходного файла
Программа должна вывести наименьшее натуральное число, которое больше N и является палиндромом.
Примеры
Ввод
4321
Вывод
4334
Python
Задача на питоне.!
Еще вариант.
"""
Проверяем от центра влево и вправо, зеркальные.
Если находим пару, у которой левая меньше правой,
или если обе половины равны,
~~~~то увеличиваем на единицу средние одну или две цифры.
~~~~а остальные правые меняем на отзеркаленную левую
12 3 41 - 12 4 21
123456 655321 - 123457 754321
Если находим пару, у которой левая цифра больше правой,
~~~~то начиная с этой цифры правой половине присвоим левую отзеркалив
12317 - 12321
"""
from timeit import default_timer as timer
#s = input()
#n = 1234321#int(input())
n = int('1234598754411128'*1000)
start = timer()
s = str(n)
s = list(s)
odd = len(s)%2# 1 - если нечетное количество цифр
hs = (len(s)+1)//2#половина
sl = s[hs-1::-1]#левая половина от средины к началу
sr = s[hs:]# правая половина от средины к концу
if sl[odd:] <= sr:
~~~~sl[0] = chr(ord(sl[0])+1)
~~~~sr = sl
else:
~~~~fl = 1
~~~~for i,a in enumerate(sl[odd:]):
~~~~~~~~if fl:
~~~~~~~~~~~~if sl[i+odd] > sr[i]:
~~~~~~~~~~~~~~~~fl = 0
~~~~~~~~if not fl:
~~~~~~~~~~~~sr[i] = sl[i+odd]
res = ''.join(sl[::-1] + sl[odd:])
print(res)
end = timer()
print(end - start)
PS
Лишнее сами уберите.
"""
Проверяем от центра влево и вправо, зеркальные.
Если находим пару, у которой левая меньше правой,
или если обе половины равны,
~~~~то увеличиваем на единицу средние одну или две цифры.
~~~~а остальные правые меняем на отзеркаленную левую
12 3 41 - 12 4 21
123456 655321 - 123457 754321
Если находим пару, у которой левая цифра больше правой,
~~~~то начиная с этой цифры правой половине присвоим левую отзеркалив
12317 - 12321
"""
from timeit import default_timer as timer
#s = input()
#n = 1234321#int(input())
n = int('1234598754411128'*1000)
start = timer()
s = str(n)
s = list(s)
odd = len(s)%2# 1 - если нечетное количество цифр
hs = (len(s)+1)//2#половина
sl = s[hs-1::-1]#левая половина от средины к началу
sr = s[hs:]# правая половина от средины к концу
if sl[odd:] <= sr:
~~~~sl[0] = chr(ord(sl[0])+1)
~~~~sr = sl
else:
~~~~fl = 1
~~~~for i,a in enumerate(sl[odd:]):
~~~~~~~~if fl:
~~~~~~~~~~~~if sl[i+odd] > sr[i]:
~~~~~~~~~~~~~~~~fl = 0
~~~~~~~~if not fl:
~~~~~~~~~~~~sr[i] = sl[i+odd]
res = ''.join(sl[::-1] + sl[odd:])
print(res)
end = timer()
print(end - start)
PS
Лишнее сами уберите.
не думай о числе как о числе...
думай как о строке...
берёшь первую поливину строки, и пришиваешь к ней эту же половину, но развёрнутую наоборот... всё...
если число букв нечётное, то оставляешь средню.. букву где стояла...
сомнения?
берите тогда ЧИСЛО... в 200 цифр... и делайте...
думай как о строке...
берёшь первую поливину строки, и пришиваешь к ней эту же половину, но развёрнутую наоборот... всё...
если число букв нечётное, то оставляешь средню.. букву где стояла...
сомнения?
берите тогда ЧИСЛО... в 200 цифр... и делайте...
Алексей Степанов
Выдыхайте, уважаемый.
Сергей Малокуцкий
Если можете, то напишите код пожалуйста
Александр Попов
это так не работает)
Интересно. Есть какие-то варианты алгоритмов?
Я эту фигню нашим программерам дам..
Я эту фигню нашим программерам дам..
n = int(input())
k = 0
while True:
----n=int(n)+1
----b=str(n)[-1::-1]
----if str(n)==b:
--------break
print(n)
На питоне, работает. Могу ещё C# скинуть если хочешь
k = 0
while True:
----n=int(n)+1
----b=str(n)[-1::-1]
----if str(n)==b:
--------break
print(n)
На питоне, работает. Могу ещё C# скинуть если хочешь
Sasori Acasuno
"На питоне, работает. "
И за какое время у Вас обрабатывается 200 циферное число? Которое в условии.
И за какое время у Вас обрабатывается 200 циферное число? Которое в условии.
Сергей Малокуцкий
пишет что долго обрабатывается
Сергей Малокуцкий
выполняется*
Похожие вопросы
- Решить две задачи на питоне. Помогите пожалуйста
- Задача по питону для начинающих
- нужно написать задачи на питоне
- Задача в питоне!!!!!! Дано целое число n (n находится в диапазоне от 1 до 99), определяющее возраст человека в годах.
- Помогите с 3 задачами на питон 3!!! пожалуйста!!
- Задача "Шашки", питон
- Помогите решить задачу на питон!!
- Помогите решить задачу в питоне, пожалуйста.
- Помогите решить задачу на питоне. пожалуйста.
- Помогите, пожалуйста, с задачей на питоне!
По-моему так лучше:
s = input()
s = list(s)
odd = len(s)%2# 1 - если нечетное количество цифр
hs = (len(s)+1)//2#половина
sl = s[hs-1::-1]#левая половина от средины к началу
sr = s[hs:]# правая половина от средины к концу
if sl[odd:] <= sr: sl[0] = chr(ord(sl[0])+1)
res = ''.join(sl[::-1] + sl[odd:])
print(res)