إذا منح رقم 15 رقما ما هو أفضل طريقة للعثور على palindrome المقبل؟

StackOverflow https://stackoverflow.com/questions/1516038

  •  19-09-2019
  •  | 
  •  

سؤال

في C ++ ما سيكون أسرع منطق للعثور على palindrome المقبل لعدد رقم 15 معين؟ على سبيل المثال، سيكون هذا هو Palindrome التالي من: 134567329807541؟

هل كانت مفيدة؟

المحلول

  • تقسيم الرقم إلى ثلاثة أجزاء، head, mid, tail

    1345673 2 9807541

  • يعكس head وقارنه tail 3765431

  • إذا reverse(head) <= tail (إذا كانوا متساوين المدخلات الأولية هو palindrome، وتريد اليوم التالي)

    • إذا mid < 9, ، زيادة منتصف
    • زيادة آخر head جزء وتعيين mid := 0
  • النتيجة: = head mid reverse(head).

    1345673 3 عكس (1345673) => 134567333765431

نصائح أخرى

أعتقد أنه مثل هذا

  1. تقسيم الرقم إلى ثلاثة أجزاء 1345673 2 9807541
  2. الوجه آخر واحد 1457089
  3. إذا كان أكبر من الجزء الأول (في هذه الحالة)
    • FirstPart ++.
    • middlepart = 0.
  4. الوجه الجزء الأول واستبدال الجزء الأخير.

أنا لست على وشك تنفيذ أي شيء، لكنني أتصور المنطق سيكون:

  1. انقسام الرقم في منتصف السلسلة: X كونه الجزء الأيسر و Y يجري الجزء الأيمن.
  2. اسمحوا X '= {x + 1 إذا عكس (x) <y؛ س خلاف ذلك}
  3. والنتيجة هي ثم concat (x '، عكس (x'))؛

إذا كان الطول غير متأكدا، فأنت بحاجة إلى علاج الرقم الأوسط بشكل منفصل. ولكن هذا هو تافهة تماما.

أعتقد أن الأدو التالي يجب أن تعمل أيضا .. من الأسهل تنفيذها أيضا

  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 )

مطلوب ANS: -
23470 0 07432

الرجاء القيام به إذا كان هناك أي عيب في هذا الإجراء

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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top