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

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

Задача 1#74969

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов (ai  , aj  ) этого набора, в которых 1 ≤ i < j ≤ N и произведение элементов кратно 10.

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

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

Вложения к задаче
Показать ответ и решение
#переборный алгоритм:
f = open(’2_A.txt’)
n = int(f.readline())

counter = 0
a = []
for i in range(n):
    a += [int(f.readline())]

for i in range(0,len(a) - 1):
    for j in range(i+1,len(a)):
        if (a[i]*a[j]) % 10 == 0:
            counter += 1
print(counter)

#эффективный алгоритм:
f = open(’2_B.txt’)
n = int(f.readline())

counter = 0
prop = [0] * 4
a = int(f.readline())
for i in range(n - 1):

    prop[0] += 1
    prop[1] += int(a % 2 == 0)
    prop[2] += int(a % 5 == 0)
    prop[3] += int(a % 10 == 0)

    y = int(f.readline())
    a = y
    if y % 10 == 0:
        counter += prop[0]
    elif y % 5 == 0:
        counter += prop[1]
    elif y % 2 == 0:
        counter += prop[2]
    else:
        counter += prop[3]
print(counter)

Ответ: 49 13372430

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

Задача 2#73363

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов (ai  , aj  ) этого набора, в которых 1 ≤ i < j ≤ N и произведение элементов кратно 32.

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

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

7

19

20

11

10

9

22

12

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

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

Вложения к задаче
Показать ответ и решение
#переборный алгоритм:
f = open(’10_A.txt’)
n = int(f.readline())

counter = 0
a = []
for i in range(n):
    a += [int(f.readline())]

for i in range(0,len(a) - 1):
    for j in range(i+4,len(a)):
        if (a[i]*a[j]) % 32 == 0:
            counter += 1
print(counter)

#эффективный алгоритм:
f = open(’10_B.txt’)
n = int(f.readline())
counter = 0
prop = [0] * 6
a = int(f.readline())
for i in range(n - 1):

    prop[0] += 1
    prop[1] += int(a % 2 == 0)
    prop[2] += int(a % 4 == 0)
    prop[3] += int(a % 8 == 0)
    prop[4] += int(a % 16 == 0)
    prop[5] += int(a % 32 == 0)

    y = int(f.readline())
    a = y

    if y % 32 == 0:
        counter += prop[0]
    elif y % 16 == 0:
        counter += prop[1]
    elif y % 8 == 0:
        counter += prop[2]
    elif y % 4 == 0:
        counter += prop[3]
    elif y % 2 == 0:
        counter += prop[4]
    else:
        counter += prop[5]

print(counter)

Ответ: 35 136778776

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

Задача 3#73361

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов (ai  , aj  ) этого набора, в которых 1 ≤ i < j ≤ N и произведение элементов не кратно 22.

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

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

6

9

11

4

2

8

3

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

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

Вложения к задаче
Показать ответ и решение
#переборный алгоритм:
f = open(’8_A.txt’)
n = int(f.readline())

counter = 0
a = []
for i in range(n):
    a += [int(f.readline())]

for i in range(0,len(a) - 1):
    for j in range(i+1,len(a)):
        if (a[i]*a[j]) % 22 != 0:
            counter += 1
print(counter)

#эффективный алгоритм:
f = open(’8_B.txt’)
n = int(f.readline())

counter = 0
prop = [0] * 3
a = int(f.readline())
for i in range(n - 1):

    prop[0] += int(a % 2 != 0 and a % 11 != 0)
    prop[1] += int(a % 2 == 0 and a % 11 != 0)
    prop[2] += int(a % 2 != 0 and a % 11 == 0)

    y = int(f.readline())
    a = y
    if y % 2 != 0 and y % 11 != 0:
        counter += prop[0]
        counter += prop[1]
        counter += prop[2]
    elif y % 2 != 0 and y % 11 == 0:
        counter += prop[2]
        counter += prop[0]
    elif y % 2 == 0 and y % 11 != 0:
        counter += prop[1]
        counter += prop[0]

print(counter)

Ответ: 15343569328

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

Задача 4#73360

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов (ai  , aj  ) этого набора, в которых 1 ≤ i < j ≤ N и произведение элементов не кратно 6.

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

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

6

9

7

4

2

8

3

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

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

Вложения к задаче
Показать ответ и решение
#переборный алгоритм:
f = open(’7_A.txt’)
n = int(f.readline())

counter = 0
a = []
for i in range(n):
    a += [int(f.readline())]

for i in range(0,len(a) - 1):
    for j in range(i+1,len(a)):
        if (a[i]*a[j]) % 6 != 0:
            counter += 1
print(counter)

#эффективный алгоритм:
f = open(’7_B.txt’)
n = int(f.readline())

counter = 0
prop = [0] * 3
a = int(f.readline())
for i in range(n - 1):

    prop[0] += int(a % 2 != 0 and a % 3 != 0)
    prop[1] += int(a % 2 == 0 and a % 3 != 0)
    prop[2] += int(a % 2 != 0 and a % 3 == 0)

    y = int(f.readline())
    a = y
    if y % 2 != 0 and y % 3 != 0:
        counter += prop[0]
        counter += prop[1]
        counter += prop[2]
    elif y % 2 != 0 and y % 3 == 0:
        counter += prop[2]
        counter += prop[0]
    elif y % 2 == 0 and y % 3 != 0:
        counter += prop[1]
        counter += prop[0]

print(counter)

Ответ: 861053513084

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

Задача 5#73355

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов (ai  , aj  ) этого набора, в которых 1 ≤ i < j ≤ N и произведение элементов кратно 16.

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

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

7

4

5

6

16

8

3

2

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

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

Вложения к задаче
Показать ответ и решение
#переборный алгоритм:
f = open(’2_A.txt’)
n = int(f.readline())

counter = 0
a = []
for i in range(n):
    a += [int(f.readline())]

for i in range(0,len(a) - 1):
    for j in range(i+1,len(a)):
        if (a[i]*a[j]) % 16 == 0:
            counter += 1
print(counter)

#эффективный алгоритм:
f = open(’2_B.txt’)
n = int(f.readline())

counter = 0
prop = [0] * 5
a = int(f.readline())
for i in range(n - 1):

    prop[0] += 1
    prop[1] += int(a % 2 == 0)
    prop[2] += int(a % 4 == 0)
    prop[3] += int(a % 8 == 0)
    prop[4] += int(a % 16 == 0)

    y = int(f.readline())
    a = y
    if y % 16 == 0:
        counter += prop[0]
    elif y % 8 == 0:
        counter += prop[1]
    elif y % 4 == 0:
        counter += prop[2]
    elif y % 2 == 0:
        counter += prop[3]
    else:
        counter += prop[4]

print(counter)

Ответ: 57 336501432

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

Задача 6#73354

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов (ai  , aj  ) этого набора, в которых 1 ≤ i < j ≤ N и произведение элементов кратно 14.

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

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

7

7

5

6

12

5

14

2

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

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

Вложения к задаче
Показать ответ и решение
#переборный алгоритм:
f = open(’1_A.txt’)
n = int(f.readline())

counter = 0
a = []
for i in range(n):
    a += [int(f.readline())]

for i in range(0,len(a) - 1):
    for j in range(i+1,len(a)):
        if (a[i]*a[j]) % 14 == 0:
            counter += 1
print(counter)

#эффективный алгоритм:
f = open(’1_B.txt’)
n = int(f.readline())

counter = 0
prop = [0] * 4
a = int(f.readline())
for i in range(n - 1):

    prop[0] += 1
    prop[1] += int(a % 2 == 0)
    prop[2] += int(a % 7 == 0)
    prop[3] += int(a % 14 == 0)

    y = int(f.readline())
    a = y
    if y % 14 == 0:
        counter += prop[0]
    elif y % 7 == 0:
        counter += prop[1]
    elif y % 2 == 0:
        counter += prop[2]
    else:
        counter += prop[3]
print(counter)

Ответ: 28 357961420

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

Задача 7#73023

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить максимальное произведение R двух элементов такое, что R не кратно 15.

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

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

7

9

5

6

13

5

15

3

Для указанных чисел максимальное произведение двух элементов, не кратное 15, равно 117.

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

Вложения к задаче
Показать ответ и решение
#переборный алгоритм:
f = open(’4_A.txt’)
n = int(f.readline())
a = []
for i in range(n):
    a.append(int(f.readline()))

maxi = 0
for i in range(0,len(a)-1):
    for j in range(i+1,len(a)):
        if (a[i]*a[j]) % 15 != 0:
            maxi = max(maxi, a[i]*a[j])
print(maxi

#эффективный алгоритм:
f = open(’4_B.txt’)
n = int(f.readline())

del3 = [0, 0]
del5 = [0, 0]
notdel35 = [0, 0]
maxi = []
for i in range(n):
    a = int(f.readline())
    if a % 15 != 0:
        if a % 3 == 0 and a % 5 != 0:
            if a >= del3[1]:
                del3[0] = del3[1]
                del3[1] = a
            elif a >= del3[0]:
                del3[0] = a
        elif a % 3 != 0 and a % 5 == 0:
            if a >= del5[1]:
                del5[0] = del5[1]
                del5[1] = a
            elif a >= del5[0]:
                del5[0] = a
        else:
            if a >= notdel35[1]:
                notdel35[0] = notdel35[1]
                notdel35[1] = a
            elif a >= notdel35[0]:
                notdel35[0] = a

maxi.append(notdel35[0]*notdel35[1])
maxi.append(del3[0]*del3[1])
maxi.append(del5[0]*del5[1])
maxi.append(notdel35[1]*del3[1])
maxi.append(notdel35[1]*del5[1])
print(max(maxi))

Ответ: 9900091000000

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

Задача 8#73021

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить максимальное произведение R двух элементов такое, что R кратно 6.

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

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

7

9

5

6

12

5

13

3

Для указанных чисел максимальное произведение двух элементов, кратное 6, 156.

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

Вложения к задаче
Показать ответ и решение
#переборный алгоритм:
f = open(’2_A.txt’)
n = int(f.readline())
a = []
for i in range(n):
    a.append(int(f.readline()))

maxi = 0
for i in range(0,len(a)-1):
    for j in range(i+1,len(a)):
        if (a[i]*a[j]) % 6 == 0:
            maxi = max(maxi, a[i]*a[j])
print(maxi)

#эффективный алгоритм:
f = open(’2_B.txt’)
n = int(f.readline())
x = []
ost0 = []
ost2 = 0
ost3 = 0
maxi = []
for i in range(n):
    a = int(f.readline())
    x.append(a)
    if a % 6 == 0:
        ost0.append(a)
    else:
        if a % 2 == 0:
            ost2 = max(ost2,a)
        if a % 3 == 0:
            ost3 = max(ost3,a)

x = sorted(x)
if ost0 != []:
    if max(ost0) == max(x):
        maxi.append(max(ost0)*x[-2])
    else:
        maxi.append(max(ost0)*x[-1])
if ost2 != 0 and ost3 != 0:
    maxi.append(ost2*ost3)
print(max(maxi))

Ответ: 776136999000

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

Задача 9#63854

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

В ответе укажите два числа: значение для файла А, затем, через пробел, для файла Б. Так же можно указать ответ ТОЛЬКО для файла А.

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

Примечание. Для файла B необходимо заменить первую строку кода.

f = open("27A_8.txt")
n = int(f.readline())
k=0
k19=0
for i in range(n):
    x=int(f.readline())
    if x%19==0:
        k19+=1
    else:
        k+=1
print(k19*(k19-1)//2+k19*k)

Варианты правильных ответов:
  1. 390
  2. 390 5235009

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

Задача 10#63849

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

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

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

Примечание. Для файла B необходимо заменить первую строку кода.

f = open("27A_3.txt")
s = f.readlines()
n = int(s[0])
k = 0
k_0 = 0
k_74 = 0
k_2 = 0
k_37 = 0
for i in range(1, n + 1):
    s[i] = int(s[i])
    if s[i] % 74 == 0:
        k_74 += 1
    elif s[i] % 37 == 0:
        k_37 += 1
    elif s[i] % 2 == 0:
        k_2 += 1
    else:
        k_0 += 1
k = k_74 * k_0 + k_37 * k_2 + k_74 * k_37 + k_74 * k_2 + (k_74 * (k_74 - 1)) // 2
print(k)

Ответ: 19 1930471

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

Задача 11#63543

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

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

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

7

29

2

5

6

4

1

58

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

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27B.txt’) #для ответа на A нужно подключить файл 27A.txt
n = int(f.readline())
counter = 0
k29 = 0
nk = 0
for i in range(n):
    y = int(f.readline())
    if y % 29 == 0:
        counter += (k29 + nk)
        k29 += 1
    else:
        counter += k29
        nk += 1
print(counter)
# так же можно ответ вычислять не динамически, а статически (в таком случае строки 9 и 12 не нужны)
print(k29*(k29-1)/2 + k29*nk)

Ответ: 90 1163531

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

Задача 12#63444

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

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

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

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

Для А

s = open(’27-15a.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
cnt = 0
for i in range(n - 1):
    for j in range(i + 1, n):
        if (arr[i]*arr[j]) % 26 == 0:
            cnt += 1
print(cnt)

Для Б

s = open(’27-15b.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
n26, n13, n2 =0, 0, 0
for i in range(n):
    a = arr[i]
    if a % 26 == 0:
        n26 += 1
    elif a % 13 == 0:
        n13 += 1
    elif a % 2 == 0:
        n2 += 1
k26 = n26 * (n26 - 1) // 2 + n26 * (n - n26) + n2 * n13
print(k26)

Ответ: 234 322311252

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

Задача 13#63443

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

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

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

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

Для А

s = open(’27-14a.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
cnt = 0
for i in range(n - 1):
    for j in range(i + 1, n):
        if (arr[i]*arr[j]) % 22 == 0:
            cnt += 1
print(cnt)

Для Б

s = open(’27-14b.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
n22, n11, n2 = 0, 0, 0
for i in range(n):
    a = arr[i]
    if a % 22 == 0:
        n22 += 1
    elif a % 11 == 0:
        n11 += 1
    elif a % 2 == 0:
        n2 += 1
k22 = n22 * (n22 - 1) // 2 + n22 * (n - n22) + n2 * n11
print(k22)

Ответ: 5682 658250095

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

Задача 14#63437

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

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

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

4

2

8

9

27

Пример выходных данных для приведённого выше примера входных данных: 4 (это пары: 2,9; 2,27; 8,9; 8,27)

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

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

Для А

s = open(’27-8a.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
cnt = 0
for i in range(n - 1):
    for j in range(i + 1, n):
        if (arr[i]*arr[j]) % 18 == 0:
            cnt += 1
print(cnt)

Для Б статика

f = open(’1.txt’)
n = int(f.readline())
ans = 0
k18 = 0
k9 = 0
k6 = 0
k3 = 0
k2 = 0
nk = 0
for i in range(n):
    x = int(f.readline())
    if x % 18 == 0:
        ans += (k18 + nk + k9 + k6 + k3 + k2)
        k18 += 1
    elif x % 9 == 0:
        ans += (k18 + k2 + k6)
        k9 += 1
    elif x % 6 == 0:
        ans += (k18 + k3 + k9 + k6)
        k6 += 1
    elif x % 3 == 0:
        ans += (k18 + k6)
        k3 += 1
    elif x % 2 == 0:
        ans += (k18 + k9)
        k2 += 1
    else:
        ans += k18
        nk += 1
print(ans)

Для Б динаминка

with open(’27-8b.txt’) as f:
    n = int(f.readline())
    count = 0
    D = 18 # наш делитель
    k = [0]*D#массив,в котором каждый элемент- это количество чисел с определенном остатком от D
    for i in range(n):
        x = int(f.readline())
        for d in range(D):# проходимся по нашим остаткам
            if (x*d) % 18 == 0:
                count += k[d]#прибавляем к счетчику значение в списке k под индексом остатка
        k[x % D] += 1# увеличиваем определенное значение в списке,в зависимости от того,чему равен остаток x от D
    print(count)

Ответ: 892 256845232

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

Задача 15#63436

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

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

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

5

49

295

797

482

96

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

В ответе укажите два числа: значение для файла А, затем, через пробел, для файла Б. Так же можно указать ответ ТОЛЬКО для файла А.

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

Для А

s = open(’27-7a.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
mx = -1
for i in range(n - 1):
    for j in range(i + 1, n):
        if (arr[i]*arr[j]) % 7 == 0:
            mx = max(mx, arr[i]*arr[j])
print(mx)

Для Б

s = open(’27-7b.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
mx_kr7, m2_kr7, mx = 0, 0, 0
for i in range(n):
    a = arr[i]
    if a % 7 == 0 and a > mx_kr7:
        m2_kr7 = mx_kr7
        mx_kr7 = a
    elif a % 7 == 0 and a > m2_kr7:
        m2_kr7 = a
    elif a > mx:
        mx = a
res = max(mx_kr7*m2_kr7, mx_kr7*mx)
print(res)

Варианты правильных ответов:
  1. 863660
  2. 863660 994000

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

Задача 16#62842

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

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

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

6

7

8

9

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

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

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

Решение 27А:

# Открываем файл с именем ’27_A__1va5i.txt’
with open(’27_A__1va5i.txt’) as f:
    # Читаем каждую строку файла и преобразуем ее в целое число,
    # добавляя результат в список ’data’
    data = [int(x) for x in f]

# Изначально устанавливаем максимальное произведение равным 1
max_product = 1

# Проходим через каждый элемент в списке ’data’ (кроме последнего)
for i in range(len(data) - 1):
    # Сравниваем элемент ’data[i]’ со всеми последующими элементами в списке
    for j in range(i + 1, len(data)):
        # Вычисляем произведение двух чисел
        p = data[i] * data[j]
        # Проверяем, что произведение делится на 7 (остаток от деления на 49 равен одному из чисел [7, 14, 21, 28, 35, 42]),
        # но не на 49 (то есть не равно ни одному из чисел [7, 14, 21, 28, 35, 42] при делении на 49)
        if p % 49 in [7, 14, 21, 28, 35, 42]:
            # Если это так, обновляем максимальное произведение
            max_product = max(max_product, p)

# Выводим максимальное произведение на экран
print(max_product)

Решение 27B:

Решение в статике:

f = open(’8prob/27B.txt’)
a = [int(i) for i in f]  # Считали все числа
# Если произведение двух чисел делится на 7, но не делится на 49, это значит, что ровно одно из чисел делится на 7
# Соответственно, будем искать максимальное число, кратное 7, и максимальное число, не кратное 7,
# это и будет искомым контрольным значением
m7 = 0 # Максимальное число, кратное 7
m = 0 # Максимальное число, не кратное 7
for x in a: # Перебираем все числа из последовательности
    # Ищем m7 и m
    if x % 7 == 0 and x % 49 != 0:
        m7 = max(m7, x)
    if x % 7 != 0 and x % 49 != 0:
        m = max(m, x)
print(m * m7)

Решение в динамике:

# Имя входного файла
input_file = ’27_B__1va5j.txt’

# Инициализируем максимальное произведение как 0
max_product = 0

# Константа, связанная с модульной арифметикой
modulus = 7 * 49

# Инициализация списка для хранения максимальных значений по модулю
max_mod_values = [0] * modulus

# Открываем файл для чтения данных
with open(input_file) as file:
    # Проходим по всем строкам в файле
    for line in file:
        # Преобразуем строку в число
        number = int(line)

        # Проверяем все возможные модули
        for mod_value in range(modulus):
            # Проверяем условие: mod_value - индекс, умножаемый на текущее число
            if (number * mod_value) % 7 == 0 and (number * mod_value) % 49 != 0:
                # Если произведение больше текущего максимального произведения, обновляем его
                if number * max_mod_values[mod_value] > max_product:
                    max_product = max(max_product, number * max_mod_values[mod_value])

        # Обновляем максимальное значение для данного остатка
        max_mod_values[number % modulus] = max(number, max_mod_values[number % modulus])

# Выводим максимальное произведение
print(max_product)

Ответ: 847280 994000

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

Задача 17#59605

Определите число, которое является произведением двух элементов последовательности (элементы с различными номерами), а также наибольшим кратным 34. Гарантируется, что хотя бы одно такое произведение в последовательности есть.

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

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

7

124

1000

3

170

167

954

256

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

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

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

f = open(’C:/27_A.txt’)
n = int(f.readline())
a = [int(i) for i in f]

mx = 0
for i in range(n):
    for j in range(i+1, n):
        if a[i]*a[j] % 34 == 0:
            mx = max(mx, a[i]*a[j])
print(mx)

27B:

f = open(’C:/27_B.txt’)
n = int(f.readline())
a = [int(i) for i in f]

mx = max(a)
mx2 = max(i for i in a if i % 2 == 0)
mx17 = max(i for i in a if i % 17 == 0)
mx34 = max(i for i in a if i % 34 == 0)

mxp = 0
if mx != mx34 or a.count(mx) > 1:
    if mx*mx34 % 34 == 0:
        mxp = max(mxp, mx*mx34)

if mx2 != mx17 or a.count(mx) > 1:
    if mx2*mx17 % 34 == 0:
        mxp = max(mxp, mx2*mx17)

if mx2 != mx34 or a.count(mx) > 1:
    if mx2*mx34 % 34 == 0:
        mxp = max(mxp, mx2*mx34)

print(mxp)

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