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

Следующий палиндром

24.03.2020, 18:37. Показов 6588. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Натуральное число называется палиндромом, если его запись в десятичной системе счисления читается слева направо также, как и справа налево. По данному натуральному числу N определите следующее за ним натуральное число (то есть наименьшее число, которое превосходит N), являющееся палиндромом.

Формат входного файла:

Программа получает на вход одно натуральное число N, состоящее не более чем из 200 цифр.

Формат выходного файла:

Программа должна вывести наименьшее натуральное число, которое больше N и является палиндромом.

Примеры:

4321 => 4334


Сразу скажу, что это задание - из Сириуса. И по сути оно довольно лёгкое. Вот один из примеров решений:
Python
1
2
3
4
5
6
7
8
a=input()
b=0
while b!=1:
    if a!=a[::-1]:
        a=str(int(a)+1)
    else:
        b=1
print (a)
Но это решение неправильное из-за скорости выполнения: с маленькими цифрами это програмка справляется на "Ура", но если вы введёте 12 цифр, то он начнёт подлагивать, а если больше - он вообще не выдаёт результат (понятно почему). Можете подсказать, если способ "ускорить" процесс? Бьюсь над этим вопросом, но пока идей нет.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2020, 18:37
Ответы с готовыми решениями:

Следующий палиндром
Натуральное число называется палиндромом, если его запись в десятичной системе счисления читается слева направо также, как и справа налево....

Палиндром
Прошу помочь в решении задачи! Дано слово (все буквы строчные). Выведите: слово YES, если исходное слово является палиндромом (слово,...

Палиндром
"Introduction to C++". Одна из задач дисциплины звучит следующим образом: нужно узнать, является ли шестизначное число палиндромом....

7
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
24.03.2020, 19:16
Лучший ответ Сообщение было отмечено MaksimKim как решение

Решение

Кликните здесь для просмотра всего текста

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
#!/usr/bin/python3
 
number = int(input())
 
 
def get_next_palindrom(num):
    num = str(num)
 
    # Если строка палиндром, то возвращаем её саму
    if num == num[::-1]:
        return num
 
    # Если число цифр чётное
    if len(num) % 2 == 0:
        # Выделяем левую часть, чтобы зафиксировать левое отражение палиндрома
        left_part = num[:len(num) // 2]
 
        # Если левая часть + перевёрнутая левая часть меньше итогового числа
        if int(left_part + left_part[::-1]) < int(num):
            # Увеличиваем левую часть на единицу
            left_part = str(int(left_part) + 1)
 
        # Возвращаем левую часть + перевёрнутую левую часть
        return int(left_part + left_part[::-1])
 
    # Если число цифр чётное
    else:
        # Выделяем центральная цифра палиндрома
        mid_digit = num[len(num) // 2]
        # Выделяем левую часть
        left_part = num[:len(num) // 2]
 
        # Если левая часть + центральная цифра + перевёрнутая левая часть
        # меньше итогового числа
        if int(left_part + mid_digit + left_part[::-1]) < int(num):
            # Склеиваем левую часть и центральную цифру, переводим в формат
            # числа и увеличиваем на единицу
            left_part_with_mid = str(int(left_part + mid_digit) + 1)
 
            # Разъединяем левую часть и центральную цифру
            ledt_part = left_part_with_mid[:-1]
            mid_digit = left_part_with_mid[-1]
 
        # Возвращаем левую часть + центральную цифру + перевёрнутую
        # левую часть
        return left_part + mid_digit + left_part[::-1]
 
 
print(get_next_palindrom(number))

Вроде работает. Сразу говорю, комментировал торопясь, так что если что-то не понятно, то могу пояснить.
1
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 9
24.03.2020, 19:22  [ТС]
Нет, всё понятно. Спасибо за идею.
0
1 / 1 / 0
Регистрация: 16.03.2020
Сообщений: 2
24.03.2020, 22:09
Цитата Сообщение от unfindable_404 Посмотреть сообщение
41 ledt_part = left_part_with_mid[:-1]
В названии переменной допущена ошибка или это намеренный ход?
1
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
24.03.2020, 22:11
Цитата Сообщение от IvanNov1 Посмотреть сообщение
В названии переменной допущена ошибка или это намеренный ход?
Очепятался)))
0
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 9
24.03.2020, 23:09  [ТС]
unfindable_404, слушай, ничего не понимаю: в твоей программе всё логично написано и она выводит правильные ответы (кучу раз проверял), но всё равно есть какая-та ошибка, так пишет Сириус - там бот вводит разные значения и проверяет ответы. Нет ли у тебя предположений по поводу этой ситуации: какие-нибудь сомнение в твоей программе (строка неправильна написана или ещё что-нибудь)? Если есть - напиши пожалуйста, попытаюсь найти ошибку с помощью твоих предположений.
Спасибо ещё раз.
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
25.03.2020, 01:54
MaksimKim, unfindable_404, ошибка в 9-ой строке,
Цитата Сообщение от MaksimKim Посмотреть сообщение
вывести наименьшее натуральное число, которое больше N
2
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 9
25.03.2020, 02:49  [ТС]
u235, спасибо - и вправду, нужно было внимательней читать условие задачи!

Добавлено через 8 минут
И да - не большая правка:
Python
1
2
if num == num[::-1]:
    n=str(int(n)+1)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2020, 02:49
Помогаю со студенческими работами здесь

Палиндром
Дано слово, состоящее только из заглавных и строчных латинских букв. Проверьте, верно ли, что это слово читается одинаково как справа...

Палиндром
Суть задачи в том что бы проверить является ли число палиндромом, если да то вывести это число, если нет то вывести ближайшее число по...

Палиндром
Всем доброго времени суток! Пытаюсь написать программу, которая бы распечатывала введённые слова до первого встретившегося слова,...

Палиндром
Назовем натуральное число палиндромом, если в его десятичной записи все цифры расположены симметрично (совпадают первая и последняя...

Словесный палиндром
Добрый день. Подскажите пожалуйста, почему закомментированный код не работает, а цикл while, который, как мне кажется, такой же, работает?...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru