Максимальное произведение двух целых чисел

Вам на вход подается N целых чисел. Вам необходимо будет найти среди них два числа, которые дают максимальное произведение. Ответом на задачу будет произведение этих чисел. Массивы использовать в данной задаче запрещено!

Ввод: На первой строке вводится натуральное N, 2 ≤ N ≤ 10000. На последующих N строках вводятся целые числа |ai| ≤ 10000.

Формат вывода: Одно число — максимальное произведение двух чисел.

Попытка найти максимальное и идущее за ним максимальное и умножить их не дает нужный результат, не учитывается одинаковые значения и минусовые значения.

n = int(input())
max1 = 0
max2 = 0
if 2 <= n <= 10000:       #
    lst = list(int(input()) for i in range(n))
    for f in lst:
        if f > max1:
            max1 = f
    for j in lst:
        if j > max2 and j < max1:
            max2 = j
max = max1 * max2
print(max)

Ответы (2 шт):

Автор решения: MBo

Ну в общем, нечто подобное и надо делать. Только нужно поддерживать две пары - наибольших положительных и наименьших отрицательных

Рабочий код:

max1 = 0
max2 = 0
min1 = 0
min2 = 0
n = int(input())
for _ in range(n):
    f = int(input())
    if f > 0:
        if f > max1:
            max2 = max1
            max1 = f
        elif f > max2:
            max2 = f
    elif f < 0:
        if f < min1:
            min2 = min1
            min1 = f
        elif f < min2:
            min2 = f
mx = max(max1 * max2, min1 * min2, max1 * min1)
print(mx)
→ Ссылка
Автор решения: Firsov36

Только изучаю Python, ваша задачка заинтересовала ради тренировки. Вот мое решение без массивов (списков, кортежей, множеств, словарей). Насколько я могу судить, задачу выполняет.

'''
Вам на вход подается N целых чисел. Вам необходимо будет найти 
среди них два числа, которые дают максимальное произведение. 
Ответом на задачу будет произведение этих чисел. Массивы 
использовать в данной задаче запрещено!
'''

vmax = False
vmin = False
multiply = False

while True:
    i = input("Введите цифру или 'q' для завершения: ")

    if i == 'q':
        break

    try:
        i = int(i)
    except (TypeError, ValueError):
        print("ERROR! Нужно вводить цифры или 'q' для завершения")
        continue

    if vmax == False and 2 <= i <= 10000:
        # при первом вводе значения оно должно быть между 2 <= N <= 10000
        # учитывая это, можно спокойно оперировать стартом программы при vmax = 0
        vmax = i
        vmin = i
    elif vmax != False and i <= 10000:
        # при втором и далее вводе значений они должны быть <= 10000
        m = i * vmax
        n = i * vmin

        multiply = max(multiply, m, n)

        # if multiply == False:
        #     if m > n:
        #         multiply = m
        #     else:
        #         multiply = n
        # else:
        #     if m > multiply:
        #         multiply = m
        #     elif n > multiply:
        #         multiply = n

        if i > vmax:
            vmax = i

        if i < vmin:
            vmin = i
    else:
        print('ERROR! Нужно вводить цифры 2 <= N <= 10000 для первого значения и <= 10000 для последующих')

print('answer: %d' % multiply)
→ Ссылка