Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 07.03.2023
Сообщений: 3

Выведите одно число ближайший не больший палиндром

07.03.2023, 12:47. Показов 2491. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ближайший не больший палиндром
Вам дано число s содержащее n цифр. Вам нужно найти ближайший палиндром, который не больше заданного числа.

Формат входных данных
Первая строка входных данных содержит число n (1 ≤ n ≤ 100000).
Вторая строка должна содержать само число s.

Формат результата
Выведите одно число ближайший не больший палиндром.

Примеры
Входные данные
3
123
Результат работы
121
Входные данные
3
222
Результат работы
222
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2023, 12:47
Ответы с готовыми решениями:

Найти ближайший простой палиндром, больший заданного n (задача из раздела C++)
Мое решение: isPal n = s == rs where s = show n rs = reverse s isPrime n |...

Заменить элемент за одно обращение на ближайший больший идущий за ним
Даны элементы (числа). Нужно за одно обращение к каждому заменить его на ближайший больший идущий за ним. В случае отсутствия такого...

Найти число-палиндром, больший введенного числа
Смысл моего кода заключается в том, что после ввода числа он ищет число больше чем введенное и так что бы оно было зеркальное(123321). ...

28
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
09.03.2023, 13:46
Студворк — интернет-сервис помощи студентам
Я и не говорю, что это полное решение. Функцию вычитания единицы, не вижу смысла писать, пусть ТС над этим подумает. Там не так сложно.
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
09.03.2023, 18:04
Цитата Сообщение от eaa Посмотреть сообщение
Функцию вычитания единицы, не вижу смысла писать
Это была основная мысль при упоминании мною "костылей"... после чего я попросил пример, т.к. намекнули, что костыли - это другое.
И кроме того, когда зашла речь про ограничение на преобразование типа, поступило утверждение, что оно не нужно... пока что, без примера, это утверждение не аргументировано.

Добавлено через 3 часа 25 минут
Цитата Сообщение от eaa Посмотреть сообщение
полное решение.
Да, рабочее решение с "костылями" без влияния ограничения максимума на преобразование есть:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
def pal(n):
    tmp = str(n)
    return tmp==tmp[::-1]
 
while 1:
    k = input("Введите количество разрядов числа или '~' для выхода: ")
    if k=='~': break
     
    num = input("Введите число или '~' для выхода: ")
    if (k or num)=='~':
        break
    
    k = int(k)
    if not 0<=k<=100000 or len(num)!=k:
        print('Ошибка выполнения условий')
        continue
    
    npal = num
    if k<2 or npal=='10':
        if npal=='10':
            npal= str(int(npal)-1)
    elif not pal(npal):
        l = len(num)//2
        i1 = num[:l]
        i2 = i1[::-1]
        if len(num)%2:
            i1 = i1 + num[l]
 
        j,z,im =-1,len(i1),''
        if (i1 + i2)>num:
            if i1[j]=='0':
                while int(i1[j])==0 and abs(j)<z:
                    im += '9'
                    j-=1
 
            if str(int(i1[j])-1)=='0' and abs(j)==z:
                i1 = im
            else:
                i1 = i1[:j] + str(int(i1[j])-1) + im
 
        if len(num)%2:
            if len(i1)<z:
                i2 = i1[::-1]
            else:
                i2 = i1[:-1][::-1]
        else:
            if len(i1)<z:
                i1 = i1 + '9'
                i2 = i1[:-1][::-1]
            else:
                i2 = i1[::-1]
                
        npal =  i1 + i2
    
    print(npal)
Но, всё же, это костыли и совсем обойтись без преобразования не получилось... поэтому, хотелось бы увидеть вариант решения без костылей и без преобразования... если существует.
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
10.03.2023, 09:12
YuS_2, один из многих способов
Python
1
2
3
4
5
6
7
8
9
def decrement(s):
    s = list(s)
    for i, d in enumerate(s[::-1], 1):
        if d == '0':
            s[-i] = '9'
        else:
            s[-i] = chr(ord(d) - 1)
            break
    return ''.join(s).lstrip('0')
1
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
10.03.2023, 11:20
Red white socks, да, слона-то я и позабыл...
Согласен, преобразование отсутствует...
Остался вопрос про костыли... ну, собственно, подмена '0'->'9' - это ведь оно и есть...
Или демократическая замена - это другое?
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
10.03.2023, 13:11
YuS_2, можно считать правилом преобразования, запретить считать костылем я тоже не могу)
Вот, например, сделаю такую штуку:
Python
1
2
3
from itertools import pairwise
    
d = {y: x for x, y in pairwise('01234567890')}
Это костыль или уже нет?
В любом случае, это достаточно элементарное действие, решающее задачу.

Добавлено через 17 минут
Можно зайти с другой стороны и написать класс BigInteger с преобразованием в строку/обратно без ограничений.
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
10.03.2023, 13:33
Цитата Сообщение от Red white socks Посмотреть сообщение
сделаю такую штуку
Это да, способ приемлемый (то бишь, менее костыльный и кстати, тоже использую подобное, например, для перевода систем счисления) и более математический, т.е. математические действия выполняются с цифрами (индексами), а не со строками или буквами напрямую...
Просто, когда-то, столкнувшись с чем-то вроде:
Python
1
'15' < '9'
получил стойкую аллергию на подобные действия...
Кстати, раз уж речь зашла... был удивлен, действиями питона, при выполнении булевых операций со строками... он иногда вместо положенных True-False, может вернуть значение операнда... это очень непривычно и заставляет дуть на воду...

Иногда без костылей ведь и вправду не обойтись, например, если что-либо не позволяют сделать возможности ЯП... приходится заниматься компромиссами.
Но вообще, лучше идти по пути наименьшего сопротивления:
1. Уточнить условия задачи.
2.1. Спросить/поискать способы с помощью более опытных людей в возникшем вопросе.
2.2. Поискать в документации на инструмент способы решения.
3. Попытаться найти компромиссное решение (костыли, подпорки и прочие обходные пути)
4. При отсутствии возможностей по первым 3 пунктам, плюнуть на всё и заняться чем-то более приятным

Добавлено через 2 минуты
Цитата Сообщение от Red white socks Посмотреть сообщение
написать класс BigInteger с преобразованием в строку/обратно без ограничений.
Ну, да, почему нет... но можно же и просто подвинуть, в частности, существующее ограничение, в рамках условий... возможности ЯП позволяют это делать - чем вообще это чревато?
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
10.03.2023, 14:02
YuS_2, можно и численно решить без преобразований, но для граничных условий (k=100000) будет считать на порядок дольше из-за «разворота» числа (123 -> 321)
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
10.03.2023, 14:49
Цитата Сообщение от YuS_2 Посмотреть сообщение
но можно же и просто подвинуть, в частности, существующее ограничение, в рамках условий... возможности ЯП позволяют это делать - чем вообще это чревато?
Я, как человек, львиную долю времени проводящий в jupyter lab, могу привести пример с расширением числа рекурсий. При попытке поставить set_recursion_limit больше 1000 там просто ядро подыхает (dead kernel). Как юпитер среагирует на увеличение integer string conversion - не знаю, проверять особо не тянет.
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
10.03.2023, 15:29
Цитата Сообщение от Gdez Посмотреть сообщение
численно решить без преобразований
Это уже озвучено, с помощью индексов же, преобразование не понадобится...
а разворотами, там ведь и так есть манипуляции...
например, надо уменьшить число в текстовом виде:
110000...0n
где n=10^6 (общая разрядность числа)
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2023, 15:29
Помогаю со студенческими работами здесь

Программа должна вывести одно натуральное число — N-e в порядке возрастания число-палиндром
Рассмотрим все натуральные числа, запись которых в десятичной системе счисления является палиндромом ( при этом запись не начинается с...

Ближайший палиндром
Я только начал изучать java после js и не понимаю как тут сделать поиск ближайшего палиндрома к введенному числу, скажем у нас вводится...

Во входном файле записано целое число .В выходной файл выведите одно число – количество кругляшей в числе N
Однажды в просторах рунета появился следующий ребус: 157892 = 3 203516 = 2 409578 = 4 236271 = ? Никто так...

Найти ближайший палиндром
Студент Алихан обожает математику. Самые любимые его числа - это палиндромы. Когда Алихан видит число, которое не является палиндромом, он...

Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле
У Пети имеется игровое поле размером 3×3 , заполненное числами от 1 до 9. В начале игры он может поставить фишку в любую клетку поля. На...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru