سؤالات چالش برانگیز

بزرگترین حاصلضرب پالیندروم
سطح مقدماتی 0

بزرگترین حاصلضرب پالیندروم

عدد پالیندروم عددی است که از هر دو طرف به صورت یکسان خوانده می‌شود. مثلا 623326. بزرگترین عدد پالیندروم که از ضرب دو عدد دورقمی بدست می‌آید 9009 است که حاصلضرب 91 و 99 است.

سؤال: بزرگترین عدد پالیندروم که از ضرب دو عدد سه رقمی بدست می‌آید را پیدا کنید.

تابع check_palindrome، پالیندروم بودن عدد را بررسی می‌کند. بخش اصلی هم در یک حلقه تو در تو انجام می‌شود.

def check_palindrome(n: int):
    str_number = str(n)
    if str_number == str_number[::-1]:
        return True
    else:
        return False
 
largest_number = 1
for i in range(100, 1000):
    for j in range(100, 1000):
        x = i * j
        if check_palindrome(x) and x > largest_number:
            largest_number = x
print(largest_number)

در حلقه بالا تقریبا تمام عملیات ضرب دو بار انجام می‌شود. به عنوان مثال زمانی که اندیس i برابر با 100 می‌شود اندیس j عدد 101 می‌شود و زمانی که اندیس i عدد 101 شد اندیس j برابر با 100 می‌شود. برای کاهش تعداد عملیات ضرب می‌توان اندیس j را از i در نظر گرفت.

for i in range(100, 1000):
    for j in range(i, 1000):

نکته دیگر اینکه برای بررسی پالیندروم بودن عدد نیازی به تابع جداگانه نیست. در حلقه دوم به جای شرط check_palindrome(x) می‌توان از str(x) == str(x)[::-1] استفاده کرد. اما نوشتن در تابع جداگانه کمی خواناتر به نظر می‌رسد.

جواب نهایی: 906609

ارسال نظر

0 نظر