если дано 15-значное число, каков наилучший способ найти следующий палиндром? - PullRequest
6 голосов
/ 04 октября 2009

в c ++, какая будет самая быстрая логика для поиска следующего палиндрома с заданным 15-значным числом? например, что будет следующим палиндромом: 134567329807541?

Ответы [ 5 ]

16 голосов
/ 04 октября 2009
  • Разделите число на три части, head, mid, tail

    1345673 2 9807541

  • Обратный head и сравнить его с tail 3765431

  • Если reverse(head) <= tail (если они равны, начальный ввод - палиндром, а вы хотите следующий)

    • Если mid < 9, увеличение в середине
    • Остальное приращение head часть и набор mid := 0
  • результат: = head mid reverse(head).

    1345673 3 реверс (1345673) => 134567333765431

3 голосов
/ 04 октября 2009

Я верю, что это так

  1. Разделить номер на три части 1345673 2 9807541
  2. Отразить последний 1457089
  3. Если он больше, чем первая часть (в данном случае)
    • firstpart ++
    • middlepart = 0
  4. перевернуть первую часть и заменить последнюю часть.
1 голос
/ 04 октября 2009

Я не собираюсь ничего реализовывать, но я думаю, что логика будет:

  1. Разделить число в середине строки: X - левая часть, а Y - правая часть.
  2. Пусть X '= {X + 1, если обратное (X)
  3. В результате получается concat (X ', reverse (X'));

Если длина неровная, вам нужно обрабатывать среднюю цифру отдельно. Но это довольно тривиально.

0 голосов
/ 01 февраля 2014
Split the number into three parts head, mid and tail

if reverse(head)>tail 
result := head mid reverse(head)
else if reverse(head)= tail && mid<9 
    mid++
    result := head mid tail
else 
mid =0
head++
result := head mid reverse(head)
0 голосов
/ 14 июня 2013

Я думаю, что следующий алгоритм также должен работать .. Это проще реализовать также

  i) Divide the given nos into three parts  HEAD MID TAIL 
  ii) Add 1 to number HEAD MID
          (in case of carry, follow basic addition rules)   
  iii) reverse the new HEAD(store it in HEAD_REV)
  iv) required ans is:-  'new HEAD' MID  HEAD_REV

Надеясь, что следующий пример поможет лучше понять алгоритм

пусть nos будет: - 23469 9 12367

       So HEAD -> 23469   MID -> 9   TAIL --> 12367

       step 2:-   23469 9 +1 = 23470 0 
              (now HEAD -> 23470 MID -> 0 HEAD_REV -> 07432 )

требуется ответ: -
23470 0 07432

Пожалуйста, сообщите мне, если в этой процедуре есть недостатки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...