Вопрос о максимальном попарном произведении в python3 и при длинном вводе, таком как 100000 и 90000, и он возвращает 0 - PullRequest
0 голосов
/ 05 августа 2020

Я хотел бы ввести длинный ввод и распечатать максимальное попарное произведение между ними, но на выходе получаю 0. например, хотел бы взять 10 ^ 5 и 9 ^ 4 в качестве ввода и распечатать максимальное попарное произведение 9 ^ 9, но в качестве ответа я получаю 0. Итак, как решить эту проблему длительного ввода в python3?

   n = len(numbers)
   largest = 0
   second = 0
   for i in range(0,n):
     if numbers[i] > largest:
       second = largest
       largest = numbers[i]
       
   max_product = largest * second
   return max_product

if __name__ == '__main__':
   input_numbers = []
   input_n = int(input())
   input_numbers = [int(x) for x in input().split()]
   print(max_pairwise_product(input_numbers))

1 Ответ

0 голосов
/ 05 августа 2020

В вашем коде есть некоторые синтаксические ошибки в основной функции около input, это должно исправить:

if __name__ == '__main__':
   input_numbers = []
   input_n = input()
   input_numbers = [int(x) for x in input_n.split()]
   print(max_pairwise_product(input_numbers))

Насчет logi c, подумайте, что произойдет, если у вас 3 2 1 0. Поскольку максимальное значение будет заменено на первой итерации, second получит текущее значение largest, то есть 0, и оно никогда не будет заменено другим. Чтобы исправить это, вы должны сначала проверить, больше ли значение, чем второе, и только после этого проверить, больше ли оно largest. Следующий фрагмент должен решить вашу проблему:

def max_pairwise_product(numbers):
  n = len(numbers)
  largest = float('-inf')
  second = float('-inf')
  for i in range(0, n):
    if numbers[i] > second:
      if numbers[i] > largest:
        second = largest
        largest = numbers[i]
      else:
        second = numbers[i]
  
  max_product = largest * second
  return max_product

Я также изменил значения largest и second, чтобы запускать их при отрицательной бесконечности.

...