حاصلضربهای متقارن را در یک بازهی مشخص پیدا کنید.
عدد متقارن عددی است که با برعکس شدن ارقامش تغییری نمیکند.
برای مثال، 121 یک عدد متقارن است اما 112 نیست.
با داشتن یک بازه از اعداد، بزرگترین و کوچکترین اعداد متقارنی را پیدا کنید که حاصلضرب دو عدد درون آن بازه باشند.
راهحل شما باید بزرگترین و کوچکترین اعداد متقارن را همراه با عاملهای هر کدام در آن بازه برگرداند. اگر بزرگترین یا کوچکترین عدد متقارن بیش از یک جفت عامل در آن بازه داشته باشد، همهی جفتها را برگردانید.
با داشتن بازهی [1, 9] (هر دو شامل)...
و با داشتن فهرست همهی حاصلضربهای ممکن در این بازه:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 15, 21, 24, 27, 20, 28, 32, 36, 25, 30, 35, 40, 45, 42, 48, 54, 49, 56, 63, 64, 72, 81]
حاصلضربهای متقارن همه اعداد یکرقمی هستند (در این حالت):
[1, 2, 3, 4, 5, 6, 7, 8, 9]
کوچکترین حاصلضرب متقارن 1 است.
عاملهای آن (1, 1) هستند.
بزرگترین حاصلضرب متقارن 9 است.
عاملهای آن (1, 9) و (3, 3) هستند.
با داشتن بازهی [10, 99] (هر دو شامل)...
کوچکترین حاصلضرب متقارن 121 است.
عاملهای آن (11, 11) هستند.
بزرگترین حاصلضرب متقارن 9009 است.
عاملهای آن (91, 99) هستند.
برای حل این تمرین باید این دو تابع را پیادهسازی کنید:
largestPalindromesmallestPalindromeهر دو تابع حد پایین و حد بالای عاملها را میگیرند و یک جفت (value, [(factor1, factor2)]) برمیگردانند که شامل «عدد متقارن» و جفتهای ممکن عاملهای آن است.
اگر در مورد نوعها مطمئن نیستید، میتوانید از امضاهای ارائهشده استفاده کنید، اما نگذارید خلاقیتتان را محدود کنند.
اشکالی ندارد که در فهرست عاملها مقادیر تکراری برگردانید. ترتیب عاملها هم اهمیتی ندارد.
بهتر است برای یافتن عددهای متقارن کوچک یا بزرگ، از الگوریتمی کمی متفاوت استفاده کنید.