Тема 27. Программирование

27.06 Макс/мин, кол-во пар, произведение кратно/не кратно

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела программирование
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#17969

Дано число N  и N  натуральных чисел. Каждое число находится в диапазоне от 0 до 10000. Напишите программу, которая находит количество пар чисел, произведение элементов которых четно. Пары - любые два числа в последовательности с разными номерами.

Напишите решение как статикой, так и динамикой.

В качестве ответа запишите результат выполнения программы для N = 25  и чисел 2381, 2384, 7441, 5132, 1971, 3657, 9798, 307, 394, 4677, 8004, 5358, 9944, 8982, 7614, 3543, 6079, 3272, 2673, 7879, 3559, 8407, 3032, 7191, 9976.

Показать ответ и решение

1. Статика:

n = int(input())

count_even = 0
count_odd = 0

for i in range(n):
    current_number = int(input())
    if current_number % 2 == 0:
        count_even += 1
    else:
        count_odd += 1

answer = count_even * count_odd + count_even * (count_even - 1) // 2
print(answer)

2. Динамика:

n = int(input())

count_even = 0
count_odd = 0
answer = 0

for i in range(n):
    current_number = int(input())
    if current_number % 2 == 0:
        answer += count_even + count_odd
        count_even += 1
    else:
        answer += count_even
        count_odd += 1
print(answer)

Ответ: 222

Ошибка.
Попробуйте повторить позже

Задача 2#20710

На вход программы поступает число N и последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре неважен). Необходимо определить количество пар, для которых произведение элементов кратно 3.

В ответе запишите два числа через пробел: сначала искомое количество для файла A, затем для файла B.

Вложения к задаче
Показать ответ и решение

Переборное решение

f = open("27.txt")
n = int(f.readline())
a = [int(x) for x in f]

ans = 0
k = 3

for i in range(n):
    for j in range(i + 1, n):
        if a[i] * a[j] % k == 0:
            ans += 1

print(ans)

Статическое решение

f = open("27.txt")
n = int(f.readline())

ans = 0  # Счётчик пар для ответа
k3 = 0  # Количество чисел, кратных 3
nk = 0  # Количество чисел, не кратных 3

for i in range(n):
    x = int(f.readline())
    if x % 3 == 0:
        k3 += 1
    else:
        nk += 1

print(k3 * (k3-1) // 2 + k3 * nk)

Динамическое решение

f = open("27.txt")
n = int(f.readline())

ans = 0  # Счётчик пар для ответа
k3 = 0  # Количество чисел, кратных 3
nk = 0  # Количество чисел, не кратных 3

for i in range(n):
    x = int(f.readline())
    if x % 3 == 0:
        ans += nk + k3
        k3 += 1
    else:
        ans += k3
        nk += 1

print(ans)

Ответ: 2249 1004583330

Ошибка.
Попробуйте повторить позже

Задача 3#20712

На вход программы поступает число N и последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре неважен). Необходимо определить количество пар, для которых произведение элементов кратно 9.

В ответе запишите два числа через пробел: сначала искомое количество для файла A, затем для файла B.

Вложения к задаче
Показать ответ и решение

Переборное решение

f = open("27.txt")
n = int(f.readline())
a = [int(x) for x in f]

ans = 0
k = 9

for i in range(n):
    for j in range(i + 1, n):
        if a[i] * a[j] % k == 0:
            ans += 1

print(ans)

Статическое решение

f = open("27.txt")
n = int(f.readline())

ans = 0  # Счётчик пар для ответа
k9 = 0  # Количество чисел, кратных 9
k3 = 0  # Количество чисел, кратных 3, но не кратных 9
nk = 0  # Количество всех остальных чисел

for i in range(n):
    x = int(f.readline())
    if x % 9 == 0:
        k9 += 1
    elif x % 3 == 0:
        k3 += 1
    else:
        nk += 1

print(k9 * (k9 - 1) // 2 + k9 * (k3 + nk) + k3 * (k3 - 1) // 2)

Динамическое решение

f = open("27.txt")
n = int(f.readline())

ans = 0  # Счётчик пар для ответа
k9 = 0  # Количество чисел, кратных 9
k3 = 0  # Количество чисел, кратных 3, но не кратных 9
nk = 0  # Количество всех остальных чисел

for i in range(n):
    x = int(f.readline())
    if x % 9 == 0:
        ans += (k9 + k3 + nk)
        k9 += 1
    elif x % 3 == 0:
        ans += (k9 + k3)
        k3 += 1
    else:
        ans += k9
        nk += 1

print(ans)

Ответ: 1045 13089068

Ошибка.
Попробуйте повторить позже

Задача 4#20713

На вход программы поступает число N и последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре неважен). Необходимо определить количество пар, для которых произведение элементов кратно 38.

В ответе запишите два числа через пробел: сначала искомое количество для файла A, затем для файла B.

Вложения к задаче
Показать ответ и решение

Переборное решение

f = open("27.txt")
n = int(f.readline())
a = [int(x) for x in f]

ans = 0
k = 38

for i in range(n):
    for j in range(i + 1, n):
        if a[i] * a[j] % k == 0:
            ans += 1

print(ans)

Статическое решение

f = open("27.txt")
n = int(f.readline())

ans = 0  # Счётчик пар для ответа
k38 = 0  # Количество чисел, кратных 38
k19 = 0  # Количество чисел, кратных 19, но не кратных 38
k2 = 0  # Количество чисел, кратных 2, но не кратных 38
nk = 0  # Количество остальных чисел

for i in range(n):
    x = int(f.readline())
    if x % 38 == 0:
        k38 += 1
    elif x % 19 == 0:
        k19 += 1
    elif x % 2 == 0:
        k2 += 1
    else:
        nk += 1

print(k38 * (k38 - 1) // 2 + k38 * (k19 + k2 + nk) + k19 * k2)

Динамическое решение

f = open("27.txt")
n = int(f.readline())

ans = 0  # Счётчик пар для ответа
k38 = 0  # Количество чисел, кратных 38
k19 = 0  # Количество чисел, кратных 19, но не кратных 38
k2 = 0  # Количество чисел, кратных 2, но не кратных 38
nk = 0  # Количество остальных чисел

for i in range(n):
    x = int(f.readline())
    if x % 38 == 0:
        ans += (k38 + k19 + k2 + nk)
        k38 += 1
    elif x % 19 == 0:
        ans += (k38 + k2)
        k19 += 1
    elif x % 2 == 0:
        ans += (k38 + k19)
        k2 += 1
    else:
        ans += k38
        nk += 1

print(ans)

Ответ: 533 190043510

Ошибка.
Попробуйте повторить позже

Задача 5#20794

Имеется набор данных из N  целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар, произведение которых будет кратно 66  .

В первой строке входных данных задаётся количество чисел N  (1 ≤ N ≤ 10000)  . В каждой из последующих  N  строк записано одно целое положительное число, не превышающее 10  000  .

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла A  , затем для файла B  .

Входные данные Выходные данные
6 3
3
2
9
33
11
6
Вложения к задаче
Показать ответ и решение

Переборное решение

f = open("27.txt")
n = int(f.readline())
a = [int(x) for x in f]

ans = 0
k = 66

for i in range(n):
    for j in range(i + 1, n):
        if a[i] * a[j] % k == 0:
            ans += 1

print(ans)

Статическое решение

f = open("27.txt")
n = int(f.readline())

ans = 0  # Счётчик пар для ответа
divs = [x for x in range(1, 67) if 66 % x == 0]  # Делители числа 66
k = [0] * (66 + 1)  # Список, хранящий количество чисел, кратных соответствующему делителю

for i in range(n):
    x = int(f.readline())
    maxDiv = 0  # Максимальный делитель, которому кратно число x
    for d in divs:
        if x % d == 0:
            maxDiv = d
    k[maxDiv] += 1

# Перебор пар делителей
for a in range(len(divs)):
    for b in range(a, len(divs)):  # Начинаем с a, чтобы не перебирать одинаковые пары по 2 раза
        if divs[a] * divs[b] % 66 == 0:
            if a == b:
                ans += k[divs[a]] * (k[divs[b]] - 1) // 2
            else:
                ans += k[divs[a]] * k[divs[b]]

print(ans)

Динамическое решение

f = open("27.txt")
n = int(f.readline())

ans = 0  # Счётчик пар для ответа
divs = [x for x in range(1, 67) if 66 % x == 0]  # Делители числа 66
k = [0] * (66 + 1)  # Список, хранящий количество чисел, кратных соответствующему делителю

for i in range(n):
    x = int(f.readline())
    maxDiv = 1
    for d in divs:
        if x * d % 66 == 0:
            ans += k[d]
        if x % d == 0:
            maxDiv = d
    k[maxDiv] += 1

print(ans)

Ответ: 16 3844763

Ошибка.
Попробуйте повторить позже

Задача 6#22220

По каналу связи передавались данные в виде последовательности натуральных чисел, не больших 1000. Количество чисел не больше 106.  Контрольное значение равно максимально возможному произведению двух чисел из переданного набора, делящееся на 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)

Ответ: 2018952 2057770

Ошибка.
Попробуйте повторить позже

Задача 7#22222

По каналу связи передавались данные в виде последовательности натуральных чисел, не больших 10000. Количество чисел не больше 106.  Контрольное значение равно такому максимальному возможному произведению двух чисел из переданного набора, делящееся на 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)

Ответ: 2031918 2062095

Ошибка.
Попробуйте повторить позже

Задача 8#22223

По каналу связи передавались данные в виде последовательности натуральных чисел, не больших 1000. Количество чисел не больше 106.  Контрольное значение равно такому минимальному возможному произведению двух чисел из переданного набора, делящееся на 7, но не делящееся на 49. Если такого произведения нет, программа должна напечатать -1.

Программа должна напечатать одно число - вычисленное контрольное значение.

Входные данные

В первой строке дано количество чисел N, в каждой из последующих N строк записано одно натуральное число, не превышающее 1000.

В качестве ответа укажите результат выполнения программы на следующих тестах(ответ на каждый тест через пробел):



Тест Входные данные


Первый 4
7
5
2
4


Второй 4
7
7
49
49


Третий 4
14
3
7
14



Показать ответ и решение

Переборное решение

f = open("27.txt")
n = int(f.readline())
a = [int(x) for x in f]

ans = 10 ** 20

for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j] % 7 == 0) and (a[i] * a[j] % 49 != 0):
            ans = min(ans, a[i] * a[j])

if ans == 10 ** 20:
    ans = -1
print(ans)

Статическое решение

f = open("27.txt")
n = int(f.readline())

min_kr7 = 10 ** 20  # Минимальное число, кратное 7
min_nekr = 10 ** 20  # Минимальное число, не кратное 7

for i in range(n):
    x = int(f.readline())
    if x % 7 == 0:
        min_kr7 = min(min_kr7, x)
    else:
        min_nekr = min(min_nekr, x)

if min_kr7 == 10 ** 20 or min_nekr == 10 ** 20:
    ans = -1
else:
    ans = min_kr7 * min_nekr
print(ans)

Динамическое решение

f = open("27.txt")
n = int(f.readline())

ans = 10 ** 20
min_kr7 = 10 ** 20  # Минимальное число, кратное 7
min_nekr = 10 ** 20  # Минимальное число, не кратное 7

for i in range(n):
    x = int(f.readline())
    if x % 7 == 0:
        ans = min(ans, x * min_nekr)
        min_kr7 = min(min_kr7, x)
    else:
        ans = min(ans, x * min_kr7)
        min_nekr = min(min_nekr, x)

if ans == 10 ** 20:
    ans = -1
print(ans)

Ответ: 14 -1 21

Ошибка.
Попробуйте повторить позже

Задача 9#23514

Задание выполняется с использованием прилагаемых файлов

Имеется набор данных, состоящий из положительных целых чисел. Необходимо найти наибольшее произведение двух элементов, с разными номерами, не кратное 5  . Гарантируется, что хотя бы одно такое произведение в последовательности есть. Программа должна напечатать одно число — максимально возможное произведение, которое соответствует условиям задачи.

Входные данные:

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 100000).  Каждая из следующих N  строк содержит натуральное число, не превышающих 1000  .

Пример организации исходных данных во входном файле:

4

75

82

23

69

Для указанных входных данных значением искомого произведения должно быть 5658  .

В ответе укажите два числа: сначала значение искомого произведения для файла А, затем для файла B. Полученные значения запишите через пробел.

Вложения к задаче
Показать ответ и решение

Переборное решение

# Читаем все числа в файле
with open(’Задание 27 A.txt’, ’r’) as f:
    nums = list(map(int, f.readlines()))


n = nums[0]  # Первое число в файле N
nums = nums[1:]  # Последовательность чисел без N
ans = 0  # Искомое произведение

# Перебираем все возможные пары чисел
for i in range(n):
    for j in range(i + 1, n):
        f, s = nums[i], nums[j]  # f, s - первое и второе число из пары соответственно

        if (f * s) % 5 != 0:  # Если пара нам подходит (произведение не кратно 5)
            ans = max(ans, f * s)  # Обновляем искомое произведение если оно меньше текущего


print(ans)  # Выводим ответ

Статическое решение

Чтобы произведение двух чисел не было кратно 5, нужно чтобы оба этих числа не были кратны 5. Чтобы получить максимальное произведение — достаточно найти два таких наибольших числа и перемножить.

f = open(’Задание 27 B.txt’, ’r’)  # Открываем файл
n = int(f.readline())  # Читаем число N

mn5 = -1000000000000000000001  # Максимальное число не кратное 5
pr_mn5 = -1000000000000000000001  # Предмаксимальное число не кратное 5


for i in range(n):  # Проходимся по всем числам последовательности
    x = int(f.readline())  # Очередное число из последовательности
    if x % 5 != 0:  # Если число нам подходит (не кратно 5)
     # Если оно больше максимума или предмаксимума, то обновляем их
        if x > mn5:
            pr_mn5 = mn5
            mn5 = x
        elif x > pr_mn5:
            pr_mn5 = x


print(mn5 * pr_mn5)  # Выводим ответ
f.close()  # Закрываем файл

Динамическое решение

f = open("27.txt")
n = int(f.readline())

max_nekr5 = -10 ** 20  # Максимальное число не кратное 5
ans = -10 ** 20

for i in range(n):
    x = int(f.readline())

    if x % 5 != 0:
        # Если оно больше максимума или предмаксимума, то обновляем их
        ans = max(ans, max_nekr5 * x)
        max_nekr5 = max(max_nekr5, x)

print(ans)

Ответ: 704871 998001

Ошибка.
Попробуйте повторить позже

Задача 10#25787

Задание выполняется с использованием прилагаемых файлов

Имеется набор данных, состоящий из положительных целых чисел. Необходимо найти наибольшее произведение двух элементов, с разными номерами, кратное 11  . Гарантируется, что хотя бы одно такое произведение в последовательности есть. Программа должна напечатать одно число — максимально возможное произведение, которое соответствует условиям задачи.

Входные файлы:

Файл 27 A

Файл 27 B

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 100000)  . Каждая из следующих N  строк содержит натуральное число, не превышающих 1000  .

Пример организации исходных данных во входном файле:

4

44

10

11

56

Для указанных входных данных значением искомого произведения должно быть 2464  .

В ответе укажите два числа: сначала значение искомого произведения для файла А, затем, через пробел, для файла B.

Вложения к задаче
Показать ответ и решение

Переборное решение

f = open(’Задание_27_A__d0r5.txt’)
n = int(f.readline())
a = [int(f.readline()) for i in range(n)]
ma = -999999999
for i in range(n):
    for j in range(i + 1, n):
        if a[i] * a[j] % 11 == 0:
            ma = max(ma, a[i] * a[j])
print(ma)

 Статическое решение

f = open(’Задание_27_B__d0r9.txt’)
n = int(f.readline())
mach, pmach, pmanch = 0, 0, 0
#mach - макс. кратное 11 число
#pmach - предмакс. кратное 11 число
#manch - макс. некратное 11 число
for i in range(n):
    x = int(f.readline())
    if x % 11 == 0:
        if mach < x:
            pmach = mach
            mach = x
        elif pmach < x:
            pmach = x
    elif pmanch < x:
        pmanch = x
print(max(mach * pmach, mach * pmanch))

 Динамическое решение

f = open(’Задание_27_B__d0r9.txt’)
n = int(f.readline())

ans = 0
max_kr11 = 0  # Максимальное число, кратное 11
max_nekr = 0  # Максимальное число, не кратное 11

for i in range(n):
    x = int(f.readline())
    if x % 11 == 0:
        ans = max(ans, x * max_nekr, x * max_kr11)
        max_kr11 = max(max_kr11, x)
    else:
        ans = max(ans, x * max_kr11)
        max_nekr = max(max_nekr, x)

print(ans)

Ответ: 371140 989010

Ошибка.
Попробуйте повторить позже

Задача 11#25919

Задание выполняется с использованием прилагаемых файлов

По каналу связи передавалась последовательность положительных целых чисел, все числа не превышают 1000. Количество чисел известно. Необходимо найти контрольное значение последовательности — наибольшее число R, удовлетворяющее следующим условиям:

1) R — произведение двух различных переданных элементов последовательности («различные» означает, что не рассматриваются квадраты переданных чисел, произведения различных элементов последовательности, равных по величине, допускаются);

2) R делится на 3, но не делится на 6.

Если такого числа R нет, то контрольное значение полагается равным 0.

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

Входные файлы:

Файл 27 A

Файл 27 B

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 100000).  В каждой из последующих N строк записано одно натуральное число, не превышающее 1000.

Пример организации исходных данных во входном файле:

5

666

120

75

527

148

Для указанных входных данных значением искомого произведения должно быть 39525.

В ответе укажите два числа: сначала значение искомого произведения для файла А, затем, через пробел, для файла B.

Вложения к задаче
Показать ответ и решение

Переборное решение

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        if a[i] != a[j]:
            if ((a[i] * a[j]) % 3 == 0) and ((a[i] * a[j]) % 6 != 0):
                ans = max(ans, a[i] * a[j])
print(ans)

Статическое решение

f = open(’Задание_27_B__ejg7.txt’)
max_k3 = 0
pmax_k3 = 0
max_nekr = 0
n = int(f.readline())
for i in range(n):
    x = int(f.readline())
    if x % 3 == 0 and x % 2 != 0:
        if x > max_k3:
            pmax_kr = max_k3
            max_k3 = x
        elif x > pmax_k3:
            pmax_k3 = x
    if x % 2 != 0 and x%3!=0:
        max_nekr = max(max_nekr, x)
print(max(max_k3*pmax_k3, max_k3*max_nekr))

Динамическое решение

f = open(’Задание_27_B__ejg7.txt’)
n = int(f.readline())

ans = 0
max_kr3 = 0  # Максимальное число, кратное 3
max_nekr = 0  # Максимальное число, не кратное 3

for i in range(n):
    x = int(f.readline())
    # Чтобы произведение было кратно 3, но при этом не кратно 6 нужно,
    # чтобы в паре не было числа, кратного 2
    if x % 2 != 0:
        if x % 3 == 0:
            ans = max(ans, x * max_nekr, x * max_kr3)
            max_kr3 = max(max_kr3, x)
        else:
            ans = max(ans, x * max_kr3)
            max_nekr = max(max_nekr, x)
print(ans)

Ответ: 594375 986049

Ошибка.
Попробуйте повторить позже

Задача 12#25946

Задание выполняется с использованием прилагаемых файлов

Имеется набор данных, состоящий из положительных целых чисел. Необходимо найти наибольшее произведение двух элементов, с разными номерами, кратное 10. Гарантируется, что хотя бы одно такое произведение в последовательности есть. Программа должна напечатать одно число — максимально возможное произведение, которое соответствует условиям задачи.

Входные файлы:

Файл 27 A

Файл 27 B

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000).  Каждая из следующих N строк содержит натуральное число, не превышающих 1000.

Пример организации исходных данных во входном файле:

5

100

594

743

149

267

Для указанных входных данных значением искомого произведения должно быть 74300.

В ответе укажите два числа: сначала значение искомого произведения для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение

Переборное решение

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 10 == 0:
            ans = max(ans, a[i] * a[j])
print(ans)

Статическое решение

f = open(’Задание_27_B__f6wi.txt’)
n = int(f.readline())

max_kr10 = 0  # Максимальное число, кратное 10
predmax_kr10 = 0  # Второе по величине число, кратное 10
max_kr5 = 0  # Максимальное число, кратное 5, но не 10
max_kr2 = 0  # Максимальное число, кратное 2, но не 10
max_nekr = 0  # Максимальное число, не кратное 2, 5 или 10

for i in range(n):
    x = int(f.readline())
    if x % 10 == 0:
        if x > max_kr10:
            predmax_kr10 = max_kr10
            max_kr10 = x
        elif x > predmax_kr10:
            predmax_kr10 = x
    elif x % 5 == 0:
        max_kr5 = max(max_kr5, x)
    elif x % 2 == 0:
        max_kr2 = max(max_kr2, x)
    else:
        max_nekr = max(x, max_nekr)

# Возможные пары:
# максимальное число, кратное 10, и любое другое
pair1 = max_kr10 * max(predmax_kr10, max_kr5, max_kr2, max_nekr)
# максимальные числа, кратные 5 и 2
pair2 = max_kr5 * max_kr2
print(max(pair1, pair2))

Динамическое решение

f = open(’Задание_27_B__f6wi.txt’)
n = int(f.readline())
max_kr10 = 0  # Максимальное число, кратное 10
max_kr5 = 0  # Максимальное число, кратное 5, но не 10
max_kr2 = 0  # Максимальное число, кратное 2, но не 10
max_nekr = 0  # Максимальное число, не кратное 2, 5 или 10
ans = 0
for i in range(n):
    x = int(f.readline())
    if x % 10 == 0:
        ans = max(ans, x*max_nekr, x*max_kr10, x*max_kr2, x*max_kr5)
        max_kr10 = max(max_kr10, x)
    elif x % 5 == 0:
        ans = max(ans, x*max_kr10, x*max_kr2)
        max_kr5 = max(max_kr5, x)
    elif x % 2 == 0:
        ans = max(ans, x*max_kr10, x*max_kr5)
        max_kr2 = max(max_kr2, x)
    else:
        ans = max(ans, x*max_kr10)
        max_nekr = max(x, max_nekr)
print(ans)

Ответ: 943800 993010

Ошибка.
Попробуйте повторить позже

Задача 13#25973

Задание выполняется с использованием прилагаемых файлов

По каналу связи передавалась последовательность натуральных чисел, все числа не превышают 1000  . Количество чисел известно. Необходимо найти контрольное значение последовательности — наибольшее число R  , удовлетворяющее следующим условиям:

1. R  — произведение двух различных переданных элементов последовательности («различные» означает, что не рассматриваются квадраты переданных чисел, произведения различных элементов последовательности, равных по величине, допускаются);

2. R  делится на 1  , но не делится на 28  .

Если такого числа R  нет, то контрольное значение полагается равным 0  .

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

Входные файлы:

Файл 27 A

Файл 27 B

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 100000)  . В каждой из последующих N  строк записано одно натуральное число, не превышающее 1000  .

Пример организации исходных данных во входном файле:

5

252

504

321

627

432

Для указанных входных данных значением искомого произведения должно быть 270864  .

В ответе укажите два числа: сначала значение искомого произведения для файла A  , затем для файла B  .

Вложения к задаче
Показать ответ и решение
f = open(’Задание_27_B__fpx8.txt’)
n = int(f.readline())
a = []
for i in range(n):
    a.append(int(f.readline()))
nk2 = 0
nk4 = 0
nk7 = 0
nk14 = 0
nk28 = 0
ans = 0
ans = 0
for i in range(n):
    x = a[i]
    if x % 28 != 0:
        if x % 14 == 0:
            ans = max(ans, x*nk2)
        elif (x % 7 == 0):
            ans = max(ans, x*nk4)
        elif (x % 4 == 0):
            ans = max(ans, x*nk7)
        elif(x % 2 == 0):
            ans = max(ans, x*nk14)
        else:
            ans = max(ans, x*nk28)
    if (x % 2 != 0) and (x > nk2):
        nk2 = x
    if (x % 4 != 0) and (x > nk4):
        nk4 = x
    if (x % 7 != 0) and (x > nk7):
        nk7 = x
    if (x % 14 != 0) and (x > nk14):
        nk14 = x
    if (x % 28 != 0) and (x > nk28):
        nk28 = x
print(ans)

Ответ: 793134 986049

Ошибка.
Попробуйте повторить позже

Задача 14#26133

Задание выполняется с использованием прилагаемых файлов

Имеется набор данных, состоящий из положительных целых чисел. Необходимо найти наибольшее произведение двух элементов, с разными номерами, кратное 3  . Гарантируется, что хотя бы одно такое произведение в последовательности есть. Программа должна напечатать одно число — максимально возможное произведение, которое соответствует условиям задачи.

Входные файлы:

Файл 27 A

Файл 27 B

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000).  Каждая из следующих N строк содержит натуральное число, не превышающих 1000.

В ответе укажите два числа: сначала значение искомого произведения для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение

Переборное решение

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 3 == 0:
            ans = max(ans, a[i] * a[j])
print(ans)

Статическое решение

file = open(’Задание_27_A__hi6v__swy9.txt’)
n = int(f.readline())

max_kr3 = 0  # Максимальное число, кратное 3
predmax_kr3 = 0  # Второе по величине число, кратное 3
max_nekr = 0  # Максимальное число, не кратное 3

for i in range(n):
    x = int(f.readline())
    if x % 3 == 0:
        if x > max_kr3:
            predmax_kr3 = max_kr3
            max_kr3 = x
        elif x > predmax_kr3:
            predmax_kr3 = x
    else:
        max_nekr = max(x, max_nekr)

print(max_kr3 * max(predmax_kr3, max_nekr))

Динамическое решение

file = open(’Задание_27_A__hi6v__swy9.txt’)
n = int(file.readline())
ans = 0  # Максимальное произведение чисел, кратное 3
kr3 = 0  # Максимальное число, кратное 3
nekr = 0  # Максимальное число, не кратное 3
for i in range(n):
    x = int(file.readline())
    if x % 3 == 0:
        ans = max(ans, x * kr3, x * nekr)
        kr3 = max(kr3, x)
    else:
        ans = max(ans, x * kr3)
        nekr = max(nekr, x)
print(ans)

Ответ: 800961 999000

Ошибка.
Попробуйте повторить позже

Задача 15#26187

Задание выполняется с использованием прилагаемых файлов

Последовательность натуральных чисел характеризуется числом   — наибольшим числом, кратным 15 и являющимся произведением двух элементов последовательности с различными номерами. Найдите X  . Гарантируется, что хотя бы одно такое произведение в последовательности есть.

Входные данные:

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел   N  (1 ≤ N ≤ 100000  ). В каждой из последующих N  строк записано одно натуральное число, не превышающее 1000  .

Пример организации исходных данных во входном файле:

5

50

30

5

1000

3

Пример выходных данных для приведённого выше примера входных данных:

30000

В ответе укажите два числа: сначала значение искомого произведения для файла А, затем, через пробел, для файла B.

Вложения к задаче
Показать ответ и решение

Решение 1 (неэффективное)

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        X = a[i] * a[j]
        if X % 15 == 0:
            ans = max(ans, X)
print(ans)

Решение 2 (эффективное)

f = open("27B.txt")
mn = 0
m3 = 0
m5 = 0
m15 = 0
ans = 0
n = int(f.readline())
for i in range(n):
    x = int(f.readline())
    if x % 15 == 0:
        ans = max(ans, x*m15, x*m5, x*m3, x*mn)
        if x > m15:
            m15 = x
    elif x % 3 == 0:
        ans = max(ans, x*m15, x*m5)
        if x > m3:
            m3 = x
    elif x % 5 == 0:
        ans = max(ans, x*m3, x*m15)
        if x > m5:
            m5 = x
    else:
        ans = max(ans, x*m15)
        if x > mn:
            mn = x
print(ans)

Ответ: 818670 999000

Ошибка.
Попробуйте повторить позже

Задача 16#26250

На вход подаётся последовательность из 2 < n ≤ 100000  натуральных чисел, каждое из которых не больше 1000. Напишите программу, вычисляющую минимальное чётное произведение двух элементов последовательности. Гарантируется, что искомое произведение получить можно.

Входные данные

В первой строке дано количество чисел n  , в каждой из последующих n  строк записано одно натуральное число, не превышающее 1000.

Выходные данные

Минимальное произведение двух элементов.

Примечание: двумя элементами последовательности считаются любые два элемента, в том числе не стоящие рядом. Брать произведение элемента самого на себя запрещается, но можно брать произведение двух элементов, равных по значению.

Пример входных и выходных данных:



Входные данные Выходные данные


4 10
12
1
10
5



Вложения к задаче
Показать ответ и решение

Переборное решение

f = open("5.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 1000000000
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 2 == 0:
            ans = min(ans, a[i] * a[j])
print(ans)

Статическое решение

f = open(’5.txt’)
n = int(f.readline())

min_kr2 = 10**20  # Минимальное число, кратное 2
predmin_kr2 = 10**20  # Второе наименьшее число, кратное 2
min_nekr = 10**20  # Минимальное число, не кратное 2
for i in range(n):
    x = int(f.readline())
    if x % 2 == 0:
        if x < min_kr2:
            predmin_kr2 = min_kr2
            min_kr2 = x
        elif x < predmin_kr2:
            predmin_kr2 = x
    else:
        min_nekr = min(x, min_nekr)

print(min_kr2 * min(predmin_kr2, min_nekr))

Динамическое решение

f = open(’5.txt’)
n = int(f.readline())

minim_2 = 10000000  # Минимальное число, кратное 2
minim = 10000001  # Минимальное число, не кратное 2
ans = 10000000  # Минимальное произведение, кратное 2

for i in range(n):
    x = int(f.readline())
    if x % 2 == 0:
        ans = min(ans, minim * x, minim_2 * x)
        minim_2 = min(minim_2, x)
    else:
        ans = min(ans, minim_2 * x)
        minim = min(minim, x)
print(ans)

Ответ: 139876

Ошибка.
Попробуйте повторить позже

Задача 17#26418

Последовательность натуральных чисел характеризуется числом A  — наибольшим числом, кратным 3  и являющимся произведением двух элементов последовательности с различными номерами. Гарантируется, что хотя бы одно такое произведение в последовательности есть.

Входные данные.

Даны два входных файла ("file_A"и "file_B"), каждый из которых содержит в первой строке количество чисел   N  (1 ≤ N ≤ 100000  ). В каждой из последующих N  строк записано одно натуральное число, не превышающее 1000  .

В ответе укажите два числа: сначала значение искомого произведения для файла A, затем, через пробел, для файла B.

Вложения к задаче
Показать ответ и решение

Переборное решение

f = open("27A.txt")
n = int(f.readline())
a = [int(x) for x in f] # Считываем числа в список

ans = 0 # Переменная для максимального произведения, кратного 3

# Перебор всех возможных пар чисел
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 3 == 0:
            ans = max(ans, a[i] * a[j])

print(ans)

Статическое решение

file = open(’27B.txt’)

n = int(f.readline())

max_kr3 = 0  # Максимальное число, кратное 3
predmax_kr3 = 0  # Второе по величине число, кратное 3
max_nekr = 0  # Максимальное число, не кратное 3

for i in range(n):
    x = int(f.readline())
    if x % 3 == 0:
        if x > max_kr3:
            predmax_kr3 = max_kr3
            max_kr3 = x
        elif x > predmax_kr3:
            predmax_kr3 = x
    else:
        max_nekr = max(x, max_nekr)

print(max_kr3 * max(predmax_kr3, max_nekr))

Динамическое решение

file = open(’27B.txt’)
n = int(f.readline())

ans = 0  # Переменная для хранения максимального произведения, подходящего под условие
max_kr3 = 0  # Максимальное число, кратное 3
max_nekr = 0  # Максимальное число, не кратное 3

for i in range(n):
    x = int(f.readline())
    if x % 3 == 0:
        ans = max(ans, x * max_nekr, x * max_kr3)
        max_kr3 = max(max_kr3, x)
    else:
        ans = max(ans, x * max_kr3)
        max_nekr = max(max_nekr, x)
print(ans)

Ответ: 996000 999000

Ошибка.
Попробуйте повторить позже

Задача 18#26419

Последовательность натуральных чисел характеризуется числом R  — наибольшим числом, кратным 14 и являющимся произведением двух элементов последовательности с различными номерами. Гарантируется, что хотя бы одно такое произведение в последовательности есть.

Входные данные.

Даны два входных файла ("file_A"и "file_B"), каждый из которых содержит в первой строке количество чисел   N  (1 ≤ N ≤ 100000  ). В каждой из последующих N  строк записано одно натуральное число, не превышающее 1000.

В ответе укажите два числа: сначала значение искомого произведения для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение

Решение 1 (неэффективное)

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        R = a[i] * a[j]
        if R % 14 == 0:
            ans = max(ans, R)
print(ans)

Решение 2 (эффективное)

file = open(’file_B.txt’, ’rt’, encoding=’utf-8’)

n = int(file.readline())

maxim = -1
max_div_by14 = -1
prev_max_div_by14 = -1
max_div_by7 = -1
max_div_by2 = -1

for i in range(n):
    x = int(file.readline())
    if x % 14 == 0:
        if x > max_div_by14:
            prev_max_div_by14 = max_div_by14
            max_div_by14 = x
        elif x > prev_max_div_by14:
            prev_max_div_by14 = x
    elif x % 7 == 0:
        max_div_by7 = max(max_div_by7, x)
    elif x % 2 == 0:
        max_div_by2 = max(max_div_by2, x)
    else:
        maxim = max(maxim, x)

ans = [max_div_by14 * maxim, max_div_by14 *prev_max_div_by14]
ans += [max_div_by14 *max_div_by7, max_div_by14 *max_div_by2]
ans += [max_div_by2 * max_div_by7]
print(max(ans))

Ответ: 987000 994000

Ошибка.
Попробуйте повторить позже

Задача 19#26979

В файле содержится последовательность из 10  000  целых положительных чисел. Определите и запишите в ответе сначала количество пар элементов последовательности, для которых произведение элементов кратно 34  , затем минимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.

Вложения к задаче
Показать ответ и решение
file = open("17.txt")
a = []
count = 0
minim = 10000000000

for i in range(10000):
    a.append(int(file.readline()))

for i in range(len(a)):
    for j in range(i + 1, len(a)):
        if a[i] * a[j] % 34 == 0:
            count += 1
            minim = min(minim, a[i] + a[j])

print(count, minim)

Ответ: 4298711 21

Ошибка.
Попробуйте повторить позже

Задача 20#29240

Дана последовательность из N  целых положительных чисел. Необходимо определить количество пар элементов этой последовательности, произведение которых чётно.

В первой строке входных данных задаётся количество чисел N  (1 ≤ N ≤ 10000  ). В каждой из последующих  N  строк записано одно целое положительное число, не превышающее 10000  .

Вложения к задаче
Показать ответ и решение

Решение 1 (неэффективное)

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 2 == 0:
            ans += 1

print(ans)

Решение 2 (эффективное)

f = open(’1.txt’)
n = int(f.readline())
even, ans = 0, 0
# если число четное, то в паре с ним могут быть все числа, которые были считаны ранее
# если число нечетное, то в паре могут быть только четные числа
for i in range(n):
    x = int(f.readline())
    if x % 2 == 0:
        ans += i
        even += 1
    else:
        ans += even
print(ans)

Ответ: 1782287803
Рулетка
Вы можете получить скидку в рулетке!