По каналу связи передавались данные в виде последовательности натуральных чисел, не больших 10000. Количество чисел не больше Контрольное значение равно такому максимальному возможному произведению двух чисел из переданного набора, делящееся на 21. В последовательности гарантируется, что такое произведение есть.
Программа должна напечатать одно число — вычисленное контрольное значение.
Входные данные
В первой строке дано количество чисел N, в каждой из последующих N строк записано одно натуральное число, не превышающее 1000.
В качестве ответа укажите результат выполнения программы для файла A, затем, через пробел, для файла B.
Переборное решение
f = open("27.txt")
n = int(f.readline())
a = [int(x) for x in f]
ans = 0
k = 21
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_kr21 = 0 # Первое по величине число, кратное 21
max2_kr21 = 0 # Второе по величине число, кратное 21
max_kr7 = 0 # Максимальное число, кратное 7
max_kr3 = 0 # Максимальное число, кратное 3
max_nekr = 0 # Максимальное число, не кратное 3, 7 и 21
for i in range(n):
x = int(f.readline())
if x % 21 == 0:
if x > max1_kr21:
max2_kr21 = max1_kr21
max1_kr21 = x
elif x > max2_kr21:
max2_kr21 = x
elif x % 7 == 0:
max_kr7 = max(max_kr7, x)
elif x % 3 == 0:
max_kr3 = max(max_kr3, x)
else:
max_nekr = max(max_nekr, x)
ans = max(max1_kr21 * max(max2_kr21, max_kr7, max_kr3, max_nekr), max_kr7 * max_kr3)
print(ans)
Динамическое решение
f = open("27.txt")
n = int(f.readline())
max_kr21 = 0 # Максимальное число, кратное 21
max_kr7 = 0 # Максимальное число, кратное 7
max_kr3 = 0 # Максимальное число, кратное 3
max_nekr = 0 # Максимальное число, не кратное 3, 7 и 21
ans = 0
for i in range(n):
x = int(f.readline())
if x % 21 == 0:
ans = max(ans, x * max_kr21, x * max_kr7, x * max_kr3, x * max_nekr)
max_kr21 = max(max_kr21, x)
elif x % 7 == 0:
ans = max(ans, x * max_kr3, x * max_kr21)
max_kr7 = max(max_kr7, x)
elif x % 3 == 0:
ans = max(ans, x * max_kr7, x * max_kr21)
max_kr3 = max(max_kr3, x)
else:
ans = max(ans, x * max_kr21)
max_nekr = max(max_nekr, x)
print(ans)