إذا منح رقم 15 رقما ما هو أفضل طريقة للعثور على palindrome المقبل؟
-
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
نصائح أخرى
أعتقد أنه مثل هذا
- تقسيم الرقم إلى ثلاثة أجزاء 1345673 2 9807541
- الوجه آخر واحد 1457089
- إذا كان أكبر من الجزء الأول (في هذه الحالة)
- FirstPart ++.
- middlepart = 0.
- الوجه الجزء الأول واستبدال الجزء الأخير.
أنا لست على وشك تنفيذ أي شيء، لكنني أتصور المنطق سيكون:
- انقسام الرقم في منتصف السلسلة: X كونه الجزء الأيسر و Y يجري الجزء الأيمن.
- اسمحوا X '= {x + 1 إذا عكس (x) <y؛ س خلاف ذلك}
- والنتيجة هي ثم 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)