Python - длительная остановка при расчете числа палиндрома - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь найти наибольшее число палиндромов, составленное из двух трехзначных чисел с моим кодом. он хорошо работает для 2-значных и 3-значных чисел, но когда я пробую его с 4-значными числами, он больше не работает. Нет вывода или «Процесс завершен с кодом выхода 0» в конце. Он просто остановился, как в бесконечном цикле.

palin = 0
for x in range(1, 10000):
    for y in range(1, 10000):
        mult = x * y

        if str(mult) == str(mult)[::-1]:
            if mult > palin:
                palin = mult

print(palin)

где я ошибся? Я только что запустил Python около месяца назад, поэтому мой код все еще не эффективен

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Ваш алгоритм неверен. Второй if должен быть на том же уровне, что и mult = x*y.

Я немного изменил твой код. С кодом ниже вы видите, что алгоритм не останавливается. Это просто супер медленно. Вам придется подождать несколько минут.

pa = 0
for x in range(1, 10000):
    if x % 100 == 0:
        print(x)
    for y in range(x, 10000):
        m = x*y
        if str(m) == str(m)[::-1]:
            if m > pa:
                pa = m
print(pa)

Я изменил второй range(1, 10000) на range(x, 10000), чтобы исключить дубликаты, такие как 1 * 2 и 2 * 1, в один 1 * 2.

Если вы хотите ускорить, рассмотрите возможность перехода на C или C ++.

Также вы можете изменить порядок итераций для экстремального ускорения

for x in range(10000, 0, -1):
    for y in range(10000, 0, -1):
        m = x*y
        if str(m) == str(m)[::-1]:
            print(m)
            exit(0)
0 голосов
/ 02 ноября 2018

Это своего рода бесконечный цикл, вы знаете, он очень длинный ...

Но на самом деле каким-то образом (может быть, мой компьютер работает быстро :-)) код работал всего около 15 секунд ...

Так что это хорошо.

В этом нет остановки, просто медленно.

...