Проблема Эйлера Эйлера № 4

n = 0 for a in xrange(999, 100, -1): for b in xrange(a, 100, -1): x = a * b if x > n: s = str(a * b) if s == s[::-1]: n = a * b print n 

У меня есть вопрос об этом решении проблемы . Я знаю, что это правильно, но мне интересно, почему в xrange(999,100,-1) -1 есть для a и b для циклов. Пожалуйста, объясни. Я новичок в этом 🙂

Третий параметр xrange() – это значение приращения. Значение по умолчанию равно 1, что означает, что счетчик будет подсчитываться в возрастающем направлении. Чтобы подсчитать в уменьшающемся направлении, используйте -1. Ваш счетчик будет идти от 999 до 101 (итератор xrange() останавливается как раз перед тем, как он достигнет второго значения параметра).

Для справок в будущем см. Документацию xrange() .

Параметр -1 указывает отрицательный шаг. Таким образом, переход от 999 до 100 (исключая).

Функция xrange принимает три аргумента: start , stop и step . Он возвращает диапазон чисел, начиная с start продолжая stop , но не включая его. Если «старт» больше, чем stop , должен быть предоставлен отрицательный шаг.

Таким образом, в основном xrange(999, 100, -1) даст вам [999, 998, ..., 101]

Это означает, что вы уменьшаете (следовательно, отрицательный знак) с шагом 1, от 999 до 100

Это то, что я получил для проекта Эйлера №4:

 def Palindrome(s): if s == s[::-1]: return True else: return False i = 100 j = 100 greatest = 0 while (i <= 999): while (j <= 999): product = i * j if (product > greatest and Palindrome(str(product))): greatest = product j += 1 j = 100 i += 1 print "Answer: " + str(greatest) 

-M1K3

Мое решение Python:

 container = [] for i in range(100, 999): for j in range(100, 999): num = i * j if str(num) == str(num)[::-1]: container.append(num) print(max(container)) 

Отрицательным является модификатор. В основном петли начинаются с 999, заканчиваются на 100, и добираются туда, изменяя каждое число отрицательным.

 for x in range(100, 1000): for y in range(100, 1000): product = x*y if product > x*y: break if str(product) == str(product)[::-1] and product > 900000: print (x, y, product)