Задача к ЕГЭ по информатике на тему «Макс/мин, кол-во пар, произведение кратно/не кратно» №2

На вход программы поступает последовательность из 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
Оцените статью
Я решу все!