Проект Эйлера - Задача 4



Наибольшее произведение-палиндром

Число-палиндром с обеих сторон (справа налево и слева направо) читается одинаково. Самое большое число-палиндром, полученное умножением двух двузначных чисел – 9009 = 91 × 99.

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

Моё решение (Python) под катом:

Чтобы решить эту задачку мне пришлось схитрить. Во первых, я спросил у Гугла какой именно палиндром мне надо найти. Гугл сказал что это 906609. Во вторых я хотел написать алгоритм который решает только данную задачу. Потому что я хочу попробовать разные возможности Питона.

В начале я задаю переменный. Было интересно поработать с листами.
num1 = 999 num2 = 999 polist = list() i = 0

Затем я написал код который проверяет именно 6-и значные палиндромы. Другие меня не интересуют. Последняя строка самая интересная. Она превращает цифра в строку, переписывает их в обратном направлении и затем возвращает их как цифры. Это очень круто!! Не надо мучаться с разными форами и дополнительными переменными.
pol = num1 * num2 pol1 = pol // 1000 pol2 = pol % 1000 revpol2 = int(str(pol2)[::-1])

Затем сама проверка. И если число таки является палиндромом то оно будет записано в лист.
if pol1 == revpol2 and pol > 100000: polist.insert(i, pol) i += 1 num1 -= 1 if num1 < 316: num1 = 999 num2 -= 1

Затем сортируем лист от большего к меньшему и выдаем первое значение из листа. Коим и оказалось 906609. Значит мой алгоритм таки решил поставленную задачу.
polist.sort(reverse=True) print(polist[0])

Весь код целиком.
num1 = 999 num2 = 999 polist = list() i = 0 while num2 > 316: pol = num1 * num2 pol1 = pol // 1000 pol2 = pol % 1000 revpol2 = int(str(pol2)[::-1]) if pol1 == revpol2 and pol > 100000: polist.insert(i, pol) i += 1 num1 -= 1 if num1 < 316: num1 = 999 num2 -= 1 polist.sort(reverse=True) print(polist[0])

Я так решил.

1 комментарий:

  1. a = 999
    b = 999
    x = True
    while x:
    c = a*b
    c = str(c)
    print(c)
    if c[0] == c[5] and c[1] == c[4] and c[2] == c[3]:
    print ('Да это палиндром')
    x = False
    else:
    if a==b:
    a = a-1
    elif a > b:
    a = a -1
    else:
    b= b-1
    Вот мое решение, вроде попроще

    ОтветитьУдалить