По каналу связи передавались данные в виде последовательности натуральных чисел, не больших 1000. Количество чисел не больше Контрольное значение равно максимально возможному произведению двух чисел из переданного набора, делящееся на 13. В последовательности гарантируется, что такое произведение есть.
Программа должна напечатать одно число — вычисленное контрольное значение.
Входные данные
В первой строке дано количество чисел N, в каждой из последующих N строк записано одно натуральное число, не превышающее 1000.
В качестве ответа укажите результат выполнения программы для файла A, а затем, через пробел, для файла B.
Переборное решение
f = open("27.txt")
n = int(f.readline())
a = [int(x) for x in f]
ans = 0
k = 13
for i in range(n):
for j in range(i + 1, n):
if a[i] * a[j] % k == 0:
ans = max(ans, a[i] * a[j])
print(ans)
Статическое решение
f = open("27.txt")
n = int(f.readline())
max1_kr13 = 0 # Первое по величине число, кратное 13
max2_kr13 = 0 # Второе по величине число, кратное 13
max_nekr = 0 # Максимальное число, не кратное 13
for i in range(n):
x = int(f.readline())
if x % 13 == 0:
if x > max1_kr13:
max2_kr13 = max1_kr13
max1_kr13 = x
elif x > max2_kr13:
max2_kr13 = x
else:
max_nekr = max(max_nekr, x)
ans = max(max1_kr13 * max2_kr13, max1_kr13 * max_nekr)
print(ans)
Динамическое решение
f = open("27.txt")
n = int(f.readline())
max_kr13 = 0 # Максимальное число, кратное 13
max_nekr = 0 # Максимальное число, не кратное 13
ans = 0
for i in range(n):
x = int(f.readline())
if x % 13 == 0:
ans = max(ans, x * max_kr13, x * max_nekr)
max_kr13 = max(max_kr13, x)
else:
ans = max(ans, x * max_kr13)
max_nekr = max(max_nekr, x)
print(ans)