Максимальное произведение двух целых чисел
Вам на вход подается 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 шт):
Ну в общем, нечто подобное и надо делать. Только нужно поддерживать две пары - наибольших положительных и наименьших отрицательных
Рабочий код:
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)
Только изучаю 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)